67,538
社区成员
发帖
与我相关
我的任务
分享



-- 创建新的索引,加快查找速度。
ALTER TABLE report ADD INDEX idx_report_device_name ON (device_name);
-- 查询语句,仅做参考。
SELECT ri.id, ri.report_id, ri.reason, ri.topic, ri.online_at, ri.offline_at, ri.online_time, ri.gmt_create, ri.gmt_modified
FROM report_info ri, report r
WHERE r.id = ri.report_id AND r.device_name = ?
ORDER BY ri.offline_at DESC
LIMIT 1
先尝试一下我提供的代码,如果性能还是没有提升,可以考虑一下两种方案。
1. 使用 explain sql ,看看索引的使用情况,where 条件 和 order by 是否都使用上了索引,如果没有的话,调整一下索引即可。
2. 高并发的场景,一般不会用数据库来抗压力,会使用 redis 缓存来分担绝大部分的查询压力。(读远大于写的项目,尤为突出。)
最后,谈谈高并发场景的缓存使用,一般缓存会进行分级并设置数据的失效时长,
单机节点的应用程序内部会建立一级缓存,
然后,局域网内另选服务器部署redis建立二级缓存,
最后才是数据的查询操作。
一级缓存未命中(失配)时访问二级缓存,二级缓存未命中(失配)时访问数据库。
注意事项:
1. 通常缓存存储的是key-value数据。要学会缓存key-null数据来避免 缓存穿透。
2. 当缓存未命中时,向下一级缓存或者数据库获取数据的过程尽量使用互斥锁,避免 缓存击穿。
3. 缓存数据的失效时长,尽量设置成某一时间范围内的随机时长(如果存在系统配置信息,可以设置成永不过期),避免 缓存雪崩。