30条实用的MySQL优化规则

 2024-02-15 05:01:43  阅读 0

闲话少说,咱们说正事!30种常用的SQL查询语句优化方法

1.尽量避免在where子句中使用!=或运算符,否则引擎将放弃使用索引并执行全表扫描

2、优化查询,尽量避免全表扫描。 首先考虑对where和order by涉及的列创建索引。

3、尽量避免对where子句中的字段进行空值判断,否则引擎将放弃使用索引而进行全表扫描。 喜欢:

来自 t 的 id,其中 num 为 null

可以对num设置默认值0,确保表中num列不存在空值,然后像这样查询:

来自 t 的 id,其中 num=0

4、尽量避免在where子句中使用or来连接条件,否则引擎会放弃使用索引而进行全表扫描,如:

来自 t 的 id,其中 num=10 或 num=20

你可以这样查询:

来自 t 的 id,其中 num=10

联合所有

来自 t 的 id,其中 num=20

5.以下查询也将导致全表扫描:(百分号前面不能)

来自 t 的 id,其中名称如“%c%”

转到下面的索引

来自 t 的 id,其中名称如“c%”

为了提高效率,可以考虑全文搜索。

6、in和not in也要谨慎使用,否则会导致全表扫描,如:

来自 t 的 id,其中 num in(1,2,3)

对于连续值,如果可以,请不要使用 in:

来自 t 的 id,其中 num 1 和 3

7、如果where子句中使用了参数,也会引起全表扫描。 由于 SQL 仅在运行时解析局部变量,因此优化器无法将访问计划的选择推迟到运行时; 它必须在编译时进行选择。 但是,如果在编译时构建访问计划,则变量的值仍然未知,并且不能用作索引选择的输入。 以下语句将执行全表扫描:

来自 t 的 id,其中 num=@num

您可以强制查询使用索引:

来自 t 的 id with(index(索引名称)) 其中 num=@num

8、尽量避免对where子句中的字段进行表达式操作,这会导致引擎放弃使用索引而进行全表扫描。 喜欢:

来自 t 的 id,其中 num/2=100

应改为:

来自 t 的 id,其中 num=100*2

9、尽量避免对where子句中的字段进行函数操作,这会导致引擎放弃使用索引而进行全表扫描。 喜欢:

id from t where (name,1,3)='abc' – 名称以 abc 开头的 id

标签: 索引 扫描 引擎

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码