where后面的条件的先后顺序是否影响执行的效率?
hudan 2004-06-30 11:34:44 比如表student
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)='女'
上面这几条的效率顺序如何?
很需要澄清的几个基本概念,望高人指点!!!