MySQL中优化sql语句查询常用的30种方法进行了详细的分析介绍

xzdxmynet 发布于 2024-01-26 阅读(35)

浅谈MySQL中优化SQL语句查询的30种常用方法

更新时间:2013年6月28日 16:42:46 作者:

本文对MySQL中优化SQL语句查询的30种常用方法进行了详细的分析和介绍。 有需要的朋友可以参考一下。

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

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

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,其中名称如“%abc%”

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

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

标签:  扫描 索引 查询 引擎 语句 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。