在SqlServer 建立索引,查询速度居然没提高???

wujinjian2008n 2009-04-22 03:58:21
表名:Emp 里面有100万条数据。

数据库中的列有Code,Name,Age,Sex
Code为自动排序。

查询语句为:
select * from Emp where Code>850000 --大概需要3秒查询完

然后我在Code列上建立了簇索引,再查询同样需要 3 秒,我试了好几遍,加不加索引查询的速度都一样啊。郁闷

为什么啊??求高人解答
...全文
1271 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
皓月明 2009-04-23
  • 打赏
  • 举报
回复
设成索引肯定能提高查询速度的
wujinjian2008n 2009-04-22
  • 打赏
  • 举报
回复
那图片怎么看啊??
Garnett_KG 2009-04-22
  • 打赏
  • 举报
回复
从图片来看,你在code上建了一个clustered index,而且已经使用了索引.

所以此时查询已经是最优了.

至於说把聚集索引去掉之後查询速度还是一样,原因是去掉索引後,查询用的是堆扫描

但此时因为数据已经按code排序,所以速度上相差不了多少。

在生产环境下,当新/删/修频繁操作一段时间後,堆扫描就会比索引查找慢了.

更多详细资料,请参考
[深度探索:Clustered Index Scan vs Table Scan . ]
http://topic.csdn.net/u/20080707/09/3c64cc80-5f7a-4116-8942-81c6deae9c07.html
浮生若梦丶 2009-04-22
  • 打赏
  • 举报
回复
wujinjian2008n 2009-04-22
  • 打赏
  • 举报
回复
我原来把Code设置为自动增长列,是不是跟这个有关啊。

现在我把自动增长列去掉了,执行效果还是一样。
wujinjian2008n 2009-04-22
  • 打赏
  • 举报
回复
满怀信心的进来看到一个 up
蓝海D鱼 2009-04-22
  • 打赏
  • 举报
回复
up
wujinjian2008n 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zzxap 的回复:]
删除索引再select
或者重建索引,减少碎片
[/Quote]

我删了重建 N 多回了,执行的效果是:要不要索引都一样。
wujinjian2008n 2009-04-22
  • 打赏
  • 举报
回复
我原来把Code设置为自动增长列,是不是跟这个有关啊。现在我把自动增长列去掉了。
zzxap 2009-04-22
  • 打赏
  • 举报
回复
删除索引再select
或者重建索引,减少碎片
wujinjian2008n 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zsuswy 的回复:]
select * from Emp where Code>850000
这种选择范围内的数据,在Code建聚集索引的查询速度是最快的。但是如果满足Code>850000的数据占整个表的比重非常大,那么建不建索引不会有太大的区别,这个估计就是你现在的这中情况。

如果Code上是非聚集索引,可能这个语句的速度比没有索引还慢,而且可能会慢很多。

如果Code上没有索引,你可以试验一下:
select * from Emp where Code=850000
这个语句与Code上有没有索引…
[/Quote]

要不要索引执行 select * from Emp where Code=850000 都一样,都不到一秒。

我这是一张单独的表,表上没有别的索引。
wujinjian2008n 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tkascor 的回复:]
你的主键是 code 吧?
如果是主键,默认就会有索引的了. 而且主键索引一般比普通索引会快3倍
[/Quote]

没有主键
zsuswy 2009-04-22
  • 打赏
  • 举报
回复
select * from Emp where Code>850000
这种选择范围内的数据,在Code建聚集索引的查询速度是最快的。但是如果满足Code>850000的数据占整个表的比重非常大,那么建不建索引不会有太大的区别,这个估计就是你现在的这中情况。

如果Code上是非聚集索引,可能这个语句的速度比没有索引还慢,而且可能会慢很多。

如果Code上没有索引,你可以试验一下:
select * from Emp where Code=850000
这个语句与Code上有没有索引就会有很大的关系。


具体的情况根据你的数据和表上的其它索引的影响结果可能会很不同,你自己可以去分析一下查询计划,看看你说的两种情况的查询计划到底有什么不同。然后再更具实际情况做优化。
你提供的信息并不是很全,很难给到你一个很明确的答案。
tkscascor 2009-04-22
  • 打赏
  • 举报
回复
你的主键是 code 吧?
如果是主键,默认就会有索引的了. 而且主键索引一般比普通索引会快3倍
wujinjian2008n 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wujinjian2008n 的回复:]
引用 4 楼 Garnett_KG 的回复:
在查询分析器中CTRL+L 看一下执行计划看索引选择的情况。
[/Quote]

我看不懂啊,麻烦帮我看一下:
wujinjian2008n 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Garnett_KG 的回复:]
在查询分析器中CTRL+L 看一下执行计划看索引选择的情况。
[/Quote]

我看不懂啊,麻烦帮我看一下:
http://i3.6.cn/cvbnm/0a/89/b3/43840224c69a125f5d4f475d2506a557.jpg
Garnett_KG 2009-04-22
  • 打赏
  • 举报
回复
在查询分析器中CTRL+L 看一下执行计划看索引选择的情况。
wujinjian2008n 2009-04-22
  • 打赏
  • 举报
回复
我把自动增长给去掉了,查询速度还是一样啊
wujinjian2008n 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Ricercar 的回复:]
Code列本来就已经索引了
[/Quote]

设为自动增长列会自动给它加索引??
Ricercar 2009-04-22
  • 打赏
  • 举报
回复
Code列本来就已经索引了

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧