概述
SQL查询慢的两个原因:搜索慢 、查询的数据太多(IO开销大)
- 查的数据太多:
- SELECT 不要跟 * 号,可以避免 * 的转义
- 只查询自己需要的字段,降低IO开销
- 分页分批查询
- 搜索慢的解决思路:
- 是否正确的使用好的索引(一张表的一次查询只能使用一个索引)
- SQL是否可以优化,比如大表的limit查询、In查询不如用范围查询来的好,between and
- 根据业务场景 分区、分表、分库
- 数据库参数调优,比如InnoDB的buffersize,官方建议75%的内存用来缓存
- 存储引擎的选择,多读少写的场景下可以考虑用Myisam,一级索引快。如果都是精确查询的话,可以考虑用Memory引擎。
- 查询结果缓存:Mysql自带的缓存功能,或者依赖第三方做缓存(Ehcache、Redis等)
- 业务上是否可以妥协,不要对过多的字段做分组、排序
- 其它辅助
- explain 查看执行计划
- 开启Mysql的慢查询日志功能,查看哪些SQL慢了
- 或者使用Druid的监控功能