where后面的条件的先后顺序是否影响执行的效率?
id name sex age
1 tom 1 23
2 jack 1 15
3 alice 0 28
4 jodan 1 45
◆1
select * from student where sex=1 and age>30
和
select * from student where age>30 and sex=1
是不是后者的效率高一些,是不是这样来执行的:
(方法1)
先读第1行,比较sex,发现相等, 再比较age,不符合, 比较2次
再读第2行,比较sex,发现相等, 再比较age,不符合, 比较2次
再读第3行,比较sex,发现不相等,不再比较age,不符合,比较1次
再读第4行,比较sex,发现相等, 再比较age,符合, 比较2次
总共比较了7次
(方法2)
先读第1行,比较age,不符合,不再比较sex 比较1次
再读第2行,比较age,不符合,不再比较sex 比较1次
再读第3行,比较age,不符合,不再比较sex 比较1次
再读第4行,比较age,符合, 比较sex 符合 比较2次
总共比较了5次
◆2 还有一个问题:
如果把sex的数据类型设置成varchar(2)
select * from student where sex='女生' -字符型
和
select * from student where sex=0 --原来的逻辑型
哪个效率好些?
◆3 还有一个问题:
如果都是字符型
select * from student where sex='女生'
select * from student where sex like '女生'
select * from student where sex like '女%'
select * from student where left(sex,1)='女'
select * from student where substring(sex,0,1)='女'
上面这几条的效率顺序如何?
很需要澄清的几个基本概念,望高人指点!!!
相关推荐
MySQL left join操作中on和where放置条件的区别介绍
优先级 两者放置相同条件,之所以可能会导致结果集不同,就是因为优先级。on的优先级是高于where的。 首先明确两个概念: LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 在left join下,两者的区别: on是在生成临时表的时候使用的条件,不管on的条件是否起到作用,都会返回左表 (table_name1) 的行。 where则是在生成临时表之后使用的条件,此时已经不管是否使
MySQL查询条件中放置on和where的区别分析
主要给大家介绍了关于MySQL查询条件中放置on和where的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
mybatis-plus分页传入参数后sql where条件没有limit分页信息操作
折腾了差不多两个小时,各种方法尝试,后来想想应该是where过滤后的数据量没有达到默认一页规定的数量所以干脆where就不显示limit信息了,试了一下还真是。。。这作者还真是把程序做的足够智能,可是这个智能也让我白白花掉了两个小时。。。还是自己太笨了…… 但是奇怪的是,如果我不设置QueryWrapper参数,where后面的分页限制又是可以出来的。百思不得其解作者的想法。。。 具体看代码: @Override public PageUtils queryPage(Map params) { IPage page = this
MySQL 联合索引与Where子句的优化 提高数据库运行效率
网站系统上线至今,数据量已经不知不觉上到500M,近8W记录了。涉及数据库操作的基本都是变得很慢了,这篇文章主要是说明配置并不是数据库操作慢的主要原因
where条件顺序不同、性能不同示例探讨
where条件顺序不同,性能不同,这个建议在Oracle11G版本还合适吗,想提高性能的的朋友可以参考下哈


疑难问题

