首页 新闻 会员 周边

一个sql语句的效率问题

0
[已解决问题] 解决于 2016-12-29 08:39

假设有语句Select ID,Name,Status From TableA where Status=0,这里的Status是tinyint型,这张表有大约几百万条数据,其中只有大约几千条数据的Status=1,其余99%都是Status=0,那么这里查询条件写Status=0和写Status!=1,效率上有区别么

MSky的主页 MSky | 菜鸟二级 | 园豆:436
提问于:2016-12-27 09:16
< >
分享
最佳答案
0

status=1的走索引(或index seek),这个是高效的

status=0的走表扫描(或index scan),数据量大的情况下相当低效。

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10424 | 2016-12-27 09:40

!=1和status=0等效。这种场景下你最好分块取(比如在id上有索引),然后加个id的range条件。

Daniel Cai | 园豆:10424 (专家六级) | 2016-12-27 10:02
其他回答(5)
0

你count一下试试就知道了噻,以b树的实现方式,应该是没有区别的吧

刘宏玺 | 园豆:14020 (专家六级) | 2016-12-27 09:29
0

不要用不等于.不过我觉得sql应该都会把不等于改成大于小于吧.不然sql就太笨了?

 

吴瑞祥 | 园豆:29449 (高人七级) | 2016-12-27 09:52
1

执行计划是最有效的证明。这里瞎讨论都没用。

czd890 | 园豆:14412 (专家六级) | 2016-12-27 10:24
0

对对,如楼上所说,把两条语句都放到执行计划一看执行时间占比就明白了.

happydaily | 园豆:301 (菜鸟二级) | 2016-12-27 11:23
0

建议楼主看看SARG(searchable argument),=是 SARG,而!= 不是SARG,因此,会导致 = 使用index,而!=不使用index

悦光阴 | 园豆:2251 (老鸟四级) | 2016-12-27 12:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册