select * from log where id = 10000
select top 1 * from log where id = 10000
这两个 那一个速度更快呢?
top 是按照 聚集索引物理顺序开始查找,找到就不再查找了,难道 第一句找到还要继续查找么,sql Server 不能自己优化这中查询?
9 个解决方案
#1
正常来说,第一条快,你可以在同一个界面,ctrl+m,然后一起执行:
select * from log where id = 10000
select top 1 * from log where id = 10000
看下百分比,高的哪个效率低
select * from log where id = 10000
select top 1 * from log where id = 10000
看下百分比,高的哪个效率低
#2
top 是按照 聚集索引物理顺序开始查找
这个说法不准确,如果数据放在几个数据文件中,那么优化器可能会进行并行查找,这时候的顺序就无法保证。另外,如果你要SELECT *,恐怕都是聚集索引扫描了
这个说法不准确,如果数据放在几个数据文件中,那么优化器可能会进行并行查找,这时候的顺序就无法保证。另外,如果你要SELECT *,恐怕都是聚集索引扫描了
#3
log id 是主键,默认是聚集索引
select * from log where id = 10000
那么找到之后,肯定不会再继续了,
不是说了吗,id是主键,具有唯一想,找到一条数据后,肯定没有其他id=10000的了
select * from log where id = 10000
那么找到之后,肯定不会再继续了,
不是说了吗,id是主键,具有唯一想,找到一条数据后,肯定没有其他id=10000的了
#4
索引的存储本身是有序存储,来提高查询效率的,
即便是非聚集索引(假如是唯一非聚集索引)
比如,1,2,4,5,6,78,9
那么,找id=5的数据,
找到“第一条”id=5的数据之后,后面的数据肯定比5大,所以不会继续找下去
即便是非聚集索引(假如是唯一非聚集索引)
比如,1,2,4,5,6,78,9
那么,找id=5的数据,
找到“第一条”id=5的数据之后,后面的数据肯定比5大,所以不会继续找下去
#5
第二条的计划应该比第一条多个排序,其它一样,效率几乎没差别。
#6
这是问什么呢?有人说 第二条快呢,但是按你说的步骤去测试确实第一条快。
#7
top 就一定会有排序么? 还是默认会按照 物理顺序?
#8
唯一值索引是这么个查询优化么?
#9
top的逻辑通常是需要进行排序的,不然怎么知道“数据集”的第一个数据呢?你要分清楚,SELECT出来的是数据集,而不是表本身,查询过程优化器需要先取数据,然后再排序,而不一定就按照索引方式来排序的。
#1
正常来说,第一条快,你可以在同一个界面,ctrl+m,然后一起执行:
select * from log where id = 10000
select top 1 * from log where id = 10000
看下百分比,高的哪个效率低
select * from log where id = 10000
select top 1 * from log where id = 10000
看下百分比,高的哪个效率低
#2
top 是按照 聚集索引物理顺序开始查找
这个说法不准确,如果数据放在几个数据文件中,那么优化器可能会进行并行查找,这时候的顺序就无法保证。另外,如果你要SELECT *,恐怕都是聚集索引扫描了
这个说法不准确,如果数据放在几个数据文件中,那么优化器可能会进行并行查找,这时候的顺序就无法保证。另外,如果你要SELECT *,恐怕都是聚集索引扫描了
#3
log id 是主键,默认是聚集索引
select * from log where id = 10000
那么找到之后,肯定不会再继续了,
不是说了吗,id是主键,具有唯一想,找到一条数据后,肯定没有其他id=10000的了
select * from log where id = 10000
那么找到之后,肯定不会再继续了,
不是说了吗,id是主键,具有唯一想,找到一条数据后,肯定没有其他id=10000的了
#4
索引的存储本身是有序存储,来提高查询效率的,
即便是非聚集索引(假如是唯一非聚集索引)
比如,1,2,4,5,6,78,9
那么,找id=5的数据,
找到“第一条”id=5的数据之后,后面的数据肯定比5大,所以不会继续找下去
即便是非聚集索引(假如是唯一非聚集索引)
比如,1,2,4,5,6,78,9
那么,找id=5的数据,
找到“第一条”id=5的数据之后,后面的数据肯定比5大,所以不会继续找下去
#5
第二条的计划应该比第一条多个排序,其它一样,效率几乎没差别。
#6
正常来说,第一条快,你可以在同一个界面,ctrl+m,然后一起执行:
select * from log where id = 10000
select top 1 * from log where id = 10000
看下百分比,高的哪个效率低
这是问什么呢?有人说 第二条快呢,但是按你说的步骤去测试确实第一条快。
#7
第二条的计划应该比第一条多个排序,其它一样,效率几乎没差别。
top 就一定会有排序么? 还是默认会按照 物理顺序?
#8
索引的存储本身是有序存储,来提高查询效率的,
即便是非聚集索引(假如是唯一非聚集索引)
比如,1,2,4,5,6,78,9
那么,找id=5的数据,
找到“第一条”id=5的数据之后,后面的数据肯定比5大,所以不会继续找下去
唯一值索引是这么个查询优化么?
#9
正常来说,第一条快,你可以在同一个界面,ctrl+m,然后一起执行:
select * from log where id = 10000
select top 1 * from log where id = 10000
看下百分比,高的哪个效率低
这是问什么呢?有人说 第二条快呢,但是按你说的步骤去测试确实第一条快。