当前位置: 代码迷 >> Sql Server >> 有1亿条数据的表,取一条数据的效率有关问题
  详细解决方案

有1亿条数据的表,取一条数据的效率有关问题

热度:70   发布时间:2016-04-24 10:42:01.0
有1亿条数据的表,取一条数据的效率问题
比如说: 有一个表log id 是主键,默认是聚集索引

select  * from log where id = 10000
select top 1  * from log where id = 10000
这两个 那一个速度更快呢?
top 是按照 聚集索引物理顺序开始查找,找到就不再查找了,难道 第一句找到还要继续查找么,sql Server 不能自己优化这中查询?

------解决方案--------------------
正常来说,第一条快,你可以在同一个界面,ctrl+m,然后一起执行:
select  * from log where id = 10000
select top 1  * from log where id = 10000

看下百分比,高的哪个效率低
------解决方案--------------------
top 是按照 聚集索引物理顺序开始查找 
这个说法不准确,如果数据放在几个数据文件中,那么优化器可能会进行并行查找,这时候的顺序就无法保证。另外,如果你要SELECT *,恐怕都是聚集索引扫描了
------解决方案--------------------
log id 是主键,默认是聚集索引

select  * from log where id = 10000
那么找到之后,肯定不会再继续了,

不是说了吗,id是主键,具有唯一想,找到一条数据后,肯定没有其他id=10000的了

------解决方案--------------------
索引的存储本身是有序存储,来提高查询效率的,
即便是非聚集索引(假如是唯一非聚集索引)
比如,1,2,4,5,6,78,9
那么,找id=5的数据,
找到“第一条”id=5的数据之后,后面的数据肯定比5大,所以不会继续找下去
------解决方案--------------------
第二条的计划应该比第一条多个排序,其它一样,效率几乎没差别。
------解决方案--------------------
引用:
Quote: 引用:

正常来说,第一条快,你可以在同一个界面,ctrl+m,然后一起执行:
select  * from log where id = 10000
select top 1  * from log where id = 10000

看下百分比,高的哪个效率低


这是问什么呢?有人说 第二条快呢,但是按你说的步骤去测试确实第一条快。
top的逻辑通常是需要进行排序的,不然怎么知道“数据集”的第一个数据呢?你要分清楚,SELECT出来的是数据集,而不是表本身,查询过程优化器需要先取数据,然后再排序,而不一定就按照索引方式来排序的。
  相关解决方案