概述
以前做项目一直没有SQL优化的概念,直到真正接触到这方面的知识和内容,才发现实际应用上有多重点,此处简要介绍一下关于SQL慢查询的内容,主要是为了有一个大致的概念。
慢SQL的特征
- 数据库CPU负载高
- IO负载高导致服务器卡住
- 查询语句正常,索引正常但是还是慢
慢查询的原因
出现慢查询有许多原因,一下是常见的一些原因。
- 没有使用索引或索引没起作用(SQL编写问题)
- I/O吞吐量小;内存不足;网速慢(硬件等问题)
- 查询结果较大;返回不必要的值(SQL编写问题)
- 锁使用不合理或出现死锁情况(SQL编写问题)
- 查询语句未优化(SQL编写问题)
部分SQL调优方法
- 不要使用 select *
- or 的查询尽量用 union 代替
- 删除表所有记录用 truncate,不要用 delete
- 不让 mysql 干多余的事情,如计算
- 尽量少用视图,它的效率低
- 没有必要时不要用DISTINCT和ORDER BY,这些动作可以改在客户端执行
- SELECT COUNT(*)的效率教低,尽量变通他的写法,而EXISTS快
- 尽量选择区分度高的列作为索引