对于慢查询语句,我们可以用日志中的sql query log来进行定位,接下来来说说如何去优化这个慢查询语句,一般而言我们可以从两个部分来进行优化:
1 优化索引
2 语义优化
用explain关键字可以查看语句的执行计划,重点关注里面的key(使用索引),select_type(关联查询方式),rows(查询数据量),type(查询方式,这个是最重要的)
优化索引
- 为所需要查的数据列构建索引,或者构建覆盖索引
- 避免在索引上进行函数操作,会导致索引失效
- 避免在索引上使用!=,>,<,不然导致索引失效
- 适当使用前缀索引
语义优化
- 避免不必要的列,即select * 这种尽量不要使用 而是只查询自己要的数据
- in和exist:in是hash关联,而exist是loop关联,因此出于对数据库的io次数考虑,当小表驱动大表时,用exists,大表驱动小表时,用in
- 数据量过大时,先分库分表,再进行查询