关于查询优化的一些思路和总结

一、程序优化
热点数据使用缓存
数据库读写分离
二、数据库方面的优化
1、数据库设计优化
如果单表数据量过大,可以根据业务来做分表
数据库表可以做一些字段冗余,可以减少连表查询,提升查询效率
2、Sql语句优化
2.1.首先定位慢查询
 开启慢查询日志 mysql
  slow_query_log:是否开启慢查询
  slow_query_log_file:慢查询日志存储路径
  long-query-time:慢查询阈值,当查询时间大于阈值时会记录到日志
 第三方监测工具
2.2.Sql优化
1、避免使用select *,只查需要的列
2、如果不需要去重尽量使用union all(union会去重,遍历耗时)
3、子查询改用连表查询(子查询会生成临时表)
4、深分页查询可以将上一页最大Id作为where条件
5、尽可能小表驱动大表
6、尽量不要太多表关联查询,可先查出每张表的数据在程序中处理
7、开启执行计划查看查询是否走索引,根据执行计划设置合理的索引
   索引如何设置: ①where条件中较为频繁的字段、order by、group by可以作为索引
               ②更新频繁的字段不适合作为索引(更新数据时也会更新索引信息)
               ③唯一性太差的字段不适合作为索引(比如:状态,查询扫描数据太多,查询优化器就不会用到索引)
               ④不会出现在where条件中的字段不应该作为索引
               ⑤where条件+group by条件+order by条件来设置组合索引,组合索引字段顺序根据查询字段热度来
   避免索引失效:
               1)遵循最佳左前缀法则:如果使用组合索引,查询条件必须按组合索引字段排序
               2)不在索引列上做任何计算操作
               3)使用模糊查询like时不要以通配符开头('%xx'),尽量不要使用全模糊查询
               4)避免使用is not null或者!=(数据表字段null可以改用0代替)
               5)存储引擎不能使用索引中范围条件右边的列
6)不要使用OR(可以改用union all)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章