小春网

 找回密码
 注册账号
查看: 723|回复: 4
收起左侧

[IT 交流] 出个问题,考考大家数据库能力,谁能答出来

[复制链接]
发表于 2015-10-8 15:14:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

x
下記のSQLはだれが一番早い
        a)select * from tab1 where Name='Tom' or Name='John' or Name='Smith'
        b)select * from tab1 where Name in ('Tom','John','Smith')
        c)select * from tab1 where Name like 'Tom' or Name like 'John' or Name like'Smith'
        d)select * from tab1 where Name!='Tom' or Name!='John' or Name!='Smith'

公司给代理商考试,让每人出5道题给负责考试的,我突然就想到了这道。

 楼主| 发表于 2015-10-9 12:33:47 | 显示全部楼层

b),原因有两点一个是b)的写法可以用到index,这是最主要原因,另一个原因是b)是拿三个词遍历所有行,而不是拿所有行反复遍历三个词,
回复

使用道具 举报

发表于 2015-10-11 10:06:00 | 显示全部楼层
表结构,索引结构啥的条件都没有。
你说呢?
没有索引的话,大家都一样。
数据分布有偏差,索引反而可能慢。
回复

使用道具 举报

发表于 2015-10-11 22:50:25 | 显示全部楼层
第一木有index。
第二,看数据,Oracle无论条件是什么一开始就全体结合,然后再根据条件排除不要的的,如果开头三个数据就是目标三行,根本没差,如果中间隔着一大堆Joha~Z的话,那处理不一样。
第三,a和b我没记错的话,oracle的执行计划是一样的。
回复

使用道具 举报

发表于 2015-10-13 04:29:55 | 显示全部楼层
SQL执行计划全都一样。。。 就没什么区别吧

sql.jpg

另外, 如果name字段设了索引的话, 这4个SQL都应该是可以用索引的。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小春网
常务客服微信
微信订阅号
手机客户端
扫一扫,查看更方便! 快速回复 返回顶部 返回列表