mysql where条件的查询顺序
SELECTcount(*)ASnumFROMt1WHERE1=1andinputtime>UNIX_TIMESTAMP(DATE_SUB(CURDATE(),INTER...
SELECT count(*) AS num FROM t1
WHERE 1=1 and inputtime>UNIX_TIMESTAMP(DATE_SUB(CURDATE(),INTERVAL 1 YEAR)) LIMIT 1;
用时 1.387s
再加上一个条件
SELECT count(*) AS num FROM t1
WHERE 1=1 and inputtime>UNIX_TIMESTAMP(DATE_SUB(CURDATE(),INTERVAL 1 YEAR)) and wtid=2380891 LIMIT 1;
用时 0.734s
那么问题来了 如果where条件查询顺序是从左往右的话 ,那么第二个语句要比第一个用的时间长吧,因为他有查询了一个条件。
个人感觉应该是先查等于再查大于吧
两个表都没有建索引 有一百多万的数据量。建索引肯定会快这个不在讨论范围内 展开
WHERE 1=1 and inputtime>UNIX_TIMESTAMP(DATE_SUB(CURDATE(),INTERVAL 1 YEAR)) LIMIT 1;
用时 1.387s
再加上一个条件
SELECT count(*) AS num FROM t1
WHERE 1=1 and inputtime>UNIX_TIMESTAMP(DATE_SUB(CURDATE(),INTERVAL 1 YEAR)) and wtid=2380891 LIMIT 1;
用时 0.734s
那么问题来了 如果where条件查询顺序是从左往右的话 ,那么第二个语句要比第一个用的时间长吧,因为他有查询了一个条件。
个人感觉应该是先查等于再查大于吧
两个表都没有建索引 有一百多万的数据量。建索引肯定会快这个不在讨论范围内 展开
1个回答
展开全部
对于WHERE后面的条件,数据库有一定的优化能力,一般是首先对有索引的字段进行筛选,由于你的wtid字段可能有索引,加上这个字段会首先用它进行筛选,所以效率大大提高。
你的分析只适合所有字段都没有索引的情况。
另外,如果多个字段都有索引,数据库会先选择索引的离散度较高的(例如ID)字段,后选择离散度较低的(例如性别)字段。
你的分析只适合所有字段都没有索引的情况。
另外,如果多个字段都有索引,数据库会先选择索引的离散度较高的(例如ID)字段,后选择离散度较低的(例如性别)字段。
追问
现在都没有加索引 wtid能检索掉大部分的数据 是不是mysql 就会先执行检索量大的条件。
where条件后的查询顺序 是自动优化的还是从左向右的 看见网上有人说从左向右的呢
(都没索引的条件下)
追答
好的数据库系统都会对语句进行深度优化,就是说都会按照一定优先级去选择AND条件的筛选顺序,而不是简单的从左到右或者相反的顺序,所以这个顺序已经显得很不重要,另外对于1=1这样的条件直接就可以忽略。具体MYSQL能优化到什么程度要查资料。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询