where 语句后的并列and的mysql where 执行顺序序

查看: 5903|回复: 7
where语句的and有没执行顺序
论坛徽章:6
本帖最后由 rushm 于
15:43 编辑
语句:SELECT count(id) as count FROM table1 WHERE sta=1 AND sid=896 AND tib=1;每天执行次数比较多,时间大概2秒多
联合索引:KEY `all_index` (`sid`,`sta`,`tid`)
explain部分where条件如下:
mysql& explain SELECT count(id) as count FROM table1 WHERE sta=1\G
*************************** 1. row ***************************
& && && &&&id: 1
&&select_type: SIMPLE
& && &&&table: table1
& && && &type: index
possible_keys: NULL
& && && & key: all_index
& && &key_len: 10
& && && & ref: NULL
& && && &rows: 3296393
& && &&&Extra: U Using index
mysql& explain SELECT count(id) as count FROM table1 WHERE sid=896 \G& && && && && && && && && && && && && && && && && && && && && && && && &&&
*************************** 1. row ***************************
& && && &&&id: 1
&&select_type: SIMPLE
& && &&&table:&&table1
& && && &type: ref
possible_keys: all_index
& && && & key: all_index
& && &key_len: 4
& && && & ref: const
& && && &rows: 269
& && &&&Extra: Using index
mysql& explain SELECT count(id) as count FROM table1 WHERE sta=1 AND sid=896 AND tib=1\G
*************************** 1. row ***************************
& && && &&&id: 1
&&select_type: SIMPLE
& && &&&table:&&table1
& && && &type: ref
possible_keys: all_index
& && && & key: all_index
& && &key_len: 10
& && && & ref: const,const,const
& && && &rows: 268
& && &&&Extra: U Using index
复制代码我想知道在有联合索引的条件下,where的and有没顺序,比如上面 sid=896返回的行比 sta=1少得多,调换他们的顺序成(... WHERE sid=896 AND&&sta=1 AND tib=1)会不会快得多。
论坛徽章:1
查询的时候按照索引的顺序写sql中where条件的顺序会快很多,从左到右
论坛徽章:52
是这样的,WHERE部分无顺序性,A AND B 还是 B AND A都是一样的,但是联合索引字段的顺序就非常重要.....推荐一篇文章:
MySQL中创建及优化索引组织结构的思路&&
论坛徽章:0
谢谢了。刚好也想知道这方面的东西。
论坛徽章:1
jinguanding 发表于
是这样的,WHERE部分无顺序性,A AND B 还是 B AND A都是一样的,但是联合索引字段的顺序就非常重要.....推 ...
学习了,谢谢金大哥!
论坛徽章:10
学习了,多谢金老大。
论坛徽章:10
一个有个误区,一直以为联合索引的顺序是什么,where 里面条件的顺序就是什么。
论坛徽章:6
多谢金老大。
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号oracle where后 and 和 or 的执行顺序 - 梦想,遥不可及 - 博客园
select X from table where 1=2 and 1=2 or 1=1;
select X from table where 1=2 and (1=2 or 1=1);
return false
原文:/nick-huang/p/4027038.html 感谢分享
阅读(...) 评论()新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 29, 距离下一级还需 171 积分
论坛徽章:0
在语句select * from t where A=a and B=b中,会先执行A=a还是B=b呢?
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
白手起家, 积分 144, 距离下一级还需 56 积分
论坛徽章:0
无先后顺序,同时检查。
可以在查询语句前面加上explain 查看查询的相关资料。
白手起家, 积分 29, 距离下一级还需 171 积分
论坛徽章:0
不理解,同时检查也能有个先后吧,比如C语言里面的if判断,如果是if(A==a && B==b),就会先判断A是否等于a,如果不等,则不会继续判断B是否等于b。
我问的问题的意思就是mysql是否也是这样处理多个where子句的
另外,explain的结果我看不出什么东西:
mysql& explain select * from ta1 where A=1 and B=2;
+-------+------+---------------+------+---------+------+------+-------------+
| table | type | possible_keys | key&&| key_len | ref&&| rows | Extra& && & |
+-------+------+---------------+------+---------+------+------+-------------+
| ta1& &| ALL&&| NULL& && && & | NULL |& & NULL | NULL |& & 1 | Using where |
+-------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
麻烦解释一下
原帖由 UIRL 于
22:16 发表
无先后顺序,同时检查。
可以在查询语句前面加上explain 查看查询的相关资料。
白手起家, 积分 29, 距离下一级还需 171 积分
论坛徽章:0
问这个问题的目的是,如果一条sql语句有多个where子句,应该把能过滤掉更多记录的判断条件放在先做判断的地方进行判断,这样有助于提高效率。
过去一直认为是先做A=a的,但有人说先做B=b,查了相关资料都没有提到这个问题
请问大家有确切知道这个问题答案的吗?
原帖由 guowei_78 于
22:34 发表
不理解,同时检查也能有个先后吧,比如C语言里面的if判断,如果是if(A==a && B==b),就会先判断A是否等于a,如果不等,则不会继续判断B是否等于b。
我问的问题的意思就是mysql是否也是这样处理多个where ...
白手起家, 积分 144, 距离下一级还需 56 积分
论坛徽章:0
开始是我理解错误,抱歉。
不过,个人认为讨论这个没有意义。
因为如果你给A和B都添加索引,那么, 是由索引来判断实际进行查询的记录数。
假设:A索引,B没有索引,所以查询语句会只检索A='a'下的记录,同时匹配B=b,KEY是A
反之,A无索引,B索引,则KEY为B,也就是说,优先权到了B字段。
如果AB都索引,则由索引判断A='a'与B='b'的记录数,谁少,则谁是KEY,优先权归谁。
不知道我说明白了没了
白手起家, 积分 29, 距离下一级还需 171 积分
论坛徽章:0
明白了,你的意思是说不必关系判断语句书写的顺讯,mysql会根据实际情况选择最优的执行方案
但能否说明这个结论获得的途径,是有文档这样说的,还是有测试证明的?
原帖由 UIRL 于
13:51 发表
开始是我理解错误,抱歉。
不过,个人认为讨论这个没有意义。
因为如果你给A和B都添加索引,那么, 是由索引来判断实际进行查询的记录数。
假设:A索引,B没有索引,所以查询语句会只检索A='a'下的记录, ...
论坛徽章:0
建议LZ仔细看看mysql手册的
'How MySQL Uses Indexes' 一章,讲的比较详细的。
白手起家, 积分 29, 距离下一级还需 171 积分
论坛徽章:0
多谢,已经找到了
原帖由 yejr 于
20:22 发表
建议LZ仔细看看mysql手册的
'How MySQL Uses Indexes' 一章,讲的比较详细的。}

我要回帖

更多关于 where条件的执行顺序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信