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)='女'
上面这几条的效率顺序如何?

很需要澄清的几个基本概念,望高人指点!!!




...全文
1853 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hudan 2004-07-04
  • 打赏
  • 举报
回复
谢谢!
woodywjl 2004-07-03
  • 打赏
  • 举报
回复
怎么看查询花费了多少时间
在查询分析器中的“查询”菜单下选中“显示执行计划”
或者你在查询前用
select @@cpu_busy查询一下,然后再查询后再用
select @@cpu_busy查询,看两个数值的差别就可以了
hudan 2004-07-02
  • 打赏
  • 举报
回复
to pjy(古虫) :

哪本书这样讲的? 我想弄个明白。

我想测试一下,请问在查询分析器中怎样得到执行的时间?
pjy 2004-07-02
  • 打赏
  • 举报
回复
我原先看过一本讲SQL SERVER的书,说在4个条件以下,各条件的先后顺序没有关系!
实际在查看查询策略时,SQL SERVER也并不是全部按照前后条件的顺序来处理SQL语句的。

个人感觉,对于楼主提的两条语句,即使没有索引,执行效率也应该一样!SQL SERVER会自动判断选择查询方案!
delwin 2004-07-02
  • 打赏
  • 举报
回复
其实这个东西如果ORACLE上面到是有深入研究的东西.
zkh7912 2004-07-02
  • 打赏
  • 举报
回复
俺又学到东西了,呵呵
dzy983 2004-07-02
  • 打赏
  • 举报
回复
怎么看查询花费了多少时间?
hudan 2004-07-02
  • 打赏
  • 举报
回复
to Leftie(左手,为人民币服务) :
可在查询分析器分别执行并查看所用时间
-------------

怎么看查询花费了多少时间?
  • 打赏
  • 举报
回复
shou cang
lynx1111 2004-07-01
  • 打赏
  • 举报
回复
up
jonas401 2004-07-01
  • 打赏
  • 举报
回复
看了受益菲浅!
hudan 2004-07-01
  • 打赏
  • 举报
回复
感谢各位
明白的差不多了,还有没有要补充的?
jonas401 2004-07-01
  • 打赏
  • 举报
回复
楼主这个问题好,可以整理成FAQ了!

mengxianbao1521 2004-07-01
  • 打赏
  • 举报
回复
简约才有效率
int > string 这个是对的。
(没有索引情况下)
饮水需思源 2004-07-01
  • 打赏
  • 举报
回复
可在查询分析器分别执行并查看所用时间
zzizz 2004-07-01
  • 打赏
  • 举报
回复
如果记录不多,就影响不大。
zjcxc 2004-07-01
  • 打赏
  • 举报
回复
1.条件顺序肯定影响执行效率,但SQL只有在不能使用索引时,才进行全表扫描
所以楼主的判断方法在sex,age字段上没有索引时适用
有索引的情况就不一定了,有索引的话,SQL会按索引来检索

2.个人认为,逻辑型会好一点,但改成int的速率应该更高

3.第一条效率最高,后面的效率差不多. 如果sex字段上有索引的话,这种差别会比较明显
zonelive 2004-07-01
  • 打赏
  • 举报
回复
关系到索引字段,自然有关
smalldeer 2004-07-01
  • 打赏
  • 举报
回复

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧