千家信息网

如何进行MySQL优化WHERE子句

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,今天就跟大家聊聊有关如何进行MySQL优化WHERE子句,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MySQL优化WHERE子句where优
千家信息网最后更新 2025年01月20日如何进行MySQL优化WHERE子句

今天就跟大家聊聊有关如何进行MySQL优化WHERE子句,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

MySQL优化WHERE子句

where优化主要是在SELECT中,因为他们最主要是在那里使用,但是同样的优化也可被用于DELETE和UPDATE语句。
但请注意,下面的优化并不是完全的。MYSQL实施了许多优化,但我没时间全部测试.

MySQL的一些优化列在下面:

删除不必要的括号:
((a AND b) AND c OR (((a AND b) AND (c AND d))))
-> (a AND b AND c) OR (a AND b AND c AND d)

常数调入:
(a -> b>5 AND b=c AND a=5

删除常数条件:
(B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6)
-> B=5 OR B=6

索引使用的常数表达式仅计算一次。
在一个单个表上的没有一个WHERE的COUNT(*)直接从表中检索信息。当仅使用一个表时,对任何NOT NULL表达式也这样做。
无效常数表达式的早期检测。MySQL快速检测某些SELECT语句是不可能的并且不返回行。
如果你不使用GROUP BY或分组函数(COUNT()、MIN()……),HAVING与WHERE合并。
为每个子联结(sub join),构造一个更简单的WHERE以得到一个更快的WHERE计算并且也尽快跳过记录。
所有常数的表在查询中的在其他任何表之前被读出。
一个常数的表是:
一个空表或一个有1行的表。
与在一个UNIQUE索引、或一个PRIMARY KEY的WHERE子句一起使用的表,这里所有的索引部分使用一个常数表达式并且索引部分被定义为NOT NULL。
所有下列的表用作常数表:

mysql> SELECT * FROM t WHERE primary_key=1;
mysql> SELECT * FROM t1,t2 WHERE t1.primary_key=1 AND t2.primary_key=t1.id;

对联结表的最好联结组合是通过尝试所有可能性来找到:(。如果所有在ORDER BY和GROUP BY的列来自同一个表,那么当联结时,该表首先被选中。
如果你使用SQL_SMALL_RESULT,MySQL将使用一个在内存中的表。
如果有一个ORDER BY子句和一个不同的GROUP BY子句,或如果ORDER BY或GROUP BY包含不是来自联结队列中的第一个表的其他表的列,创建一个临时表。
因为DISTINCT被变换到在所有的列上的一个GROUP BY,DISTINCT与ORDER BY结合也将在许多情况下需要一张临时表。
每个表的索引被查询并且使用跨越少于30% 的行的索引。如果这样的索引没能找到,将使用一个快速的表扫描。
在一些情况下,MySQL能从索引中读出行,甚至不用查询数据文件。如果索引使用的所有列是数字的,那么只有索引树被用来解答查询。
在每个记录被输出前,那些不匹配HAVING子句的行将被跳过。

下面是一些快速的查询例子:

mysql> SELECT COUNT(*) FROM tbl_name;
mysql> SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name;
mysql> SELECT MAX(key_part2) FROM tbl_name
WHERE key_part_1=constant;
mysql> SELECT ... FROM tbl_name
ORDER BY key_part1,key_part2,... LIMIT 10;
mysql> SELECT ... FROM tbl_name
ORDER BY key_part1 DESC,key_part2 DESC,... LIMIT 10;

下列查询仅使用索引树就可解决(假设索引列是数字的):

mysql> SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;
mysql> SELECT COUNT(*) FROM tbl_name
WHERE key_part1=val1 AND key_part2=val2;
mysql> SELECT key_part2 FROM tbl_name GROUP BY key_part1;

下列查询使用索引以排序顺序检索,不用一次另外的排序:

mysql> SELECT ... FROM tbl_name ORDER BY key_part1,key_part2,...
mysql> SELECT ... FROM tbl_name ORDER BY key_part1 DESC,key_part2 DESC,...

看完上述内容,你们对如何进行MySQL优化WHERE子句有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

索引 常数 子句 查询 表达式 联结 内容 不用 情况 数字 是在 语句 部分 排序 检测 检索 不同 个子 例子 内存 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 检测到dns服务器未响应 网络安全与管理是冷门专业吗 力控软件 数据库变量计算 科蓝软件开发待遇 怎么复制数据库 瓦洛兰特服务器选择 数据库将查询结果导出日志 组态王服务器与客户端工程配置 佛山物联网软件开发机构 阿克苏网络技术联系方式 台风山竹的大数据库 剪辑视频电脑用什么服务器cpu 小翼商服网络技术有限公司 做网络安全平台 数据库专家(ocp)证书 联想服务器怎么设置网络 无名巫妖的护符匣 60数据库 数据库 tab 分割 sql数据库完全备份 湖北浩航网络技术有限公司 计算机网络技术属于校企吗 热血传奇38区是哪里的服务器 成都兴业银行软件开发面试 戴尔服务器属于信息安全吗 软件开发编码分工 为什么r星登录服务器连接不上 数据库用户响应时间 奉贤区标准网络技术服务业务流程 新泰app软件开发多少钱 软件的数据库是什么格式
0