在没有索引的情况下 SQL code
select * from tb where col1=a --a
select * from tb where col1=a or col2=b --b
上面b句的执行时间理论上是a句的2倍么?
这个问题第1个回答:
错了,理论上不一定哪个快
因为执行时间包括条件比较时间和取出数据时间,第一句比较简单但是取出的数据多,所以要看数据情况才能知道哪个更快
这个问题第2个回答:
这个得看具体的查询计划了.
或者找点数据试试吧.
这个问题第3个回答:
No.
效率一样.
这个问题第4个回答:
select *
from tb where
col1 in ('a','b')
和
select * from tb where col1=a or col2=b
这个问题第5个回答:
请问楼上的第一个取出的数据不都包含在第二个语句去处的数据里吗?怎么可能比第二个多呢?
这个问题第6个回答:
引用 5 楼 yy_y_yy598 的回复: 请问楼上的第一个取出的数据不都包含在第二个语句去处的数据里吗?怎么可能比第二个多呢? 他估计看成and了
这个问题第7个回答:
我觉得差不多, 都是全表扫描,都是扫描一遍就完成了。只不过前者是一个匹配条件,后者是两个匹配条件。
SQL Server应该不会傻到去两个条件各扫描一遍的。。。。
这个问题第8个回答:
如果col1上存在索引,则第一句快.
如果col1上没有索引,col2有索引,则数据量大一点的话,第二句应该快.
如果都没有建索引,则两句效率应该一样.都是遍历一遍所有数据.
这个问题第9个回答:
引用 8 楼 hz_80 的回复: 如果col1上存在索引,则第一句快. 如果col1上没有索引,col2有索引,则数据量大一点的话,第二句应该快. 如果都没有建索引,则两句效率应该一样.都是遍历一遍所有数据. 那么在都没有索引的情况下,执行后面带一个条件的肯定是慢于带N个or连接的条件的吧,只不过不会慢N倍,是这样理解的么 ?
那如果有一张表,要从里面选几条记录转移到另一张表里,除了先insert +条件,然后delete +条件以外,有没有什么更快的方法的呢
这个问题第10个回答:
引用 2 楼 dawugui 的回复: 这个得看具体的查询计划了. 或者找点数据试试吧. 这个得看具体情况,最好还是搞点数据测一下,
这个问题第11个回答:
有没有索引都是第一个快,但倍数关系不成立(有索引第一个可能不止2倍,没有到不了2倍)
虽然都是一次扫描,但比较的字段数不同,显然速度不一样
这个问题第12个回答:
SQLSERVER数据库上及时col1上建立了索引,也没有明显的区别,优化器可能回自动挑选一个成本比较小的.