SQL中索引求解

asdkfjlsdkjg 2014-03-09 11:23:40
最近上课学到数据库的索引了,
于是我就弄了个一千五百万行的表来测试一下
加上一个非聚集索引和没加索引查询的速度都是一样的,
为什么?
不是说索引会提高查询速度吗?
加上索引的那一列的值是循环变量叠加的(数字1到15000000)
...全文
420 61 打赏 收藏 转发到动态 举报
写回复
用AI写文章
61 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-03-17
  • 打赏
  • 举报
回复
引用 60 楼 zc040921 的回复:
[quote=引用 56 楼 DBA_Huangzj 的回复:] 你说把max_dop设为1然后再测试是吧?,下班,有空测测[quote=引用 54 楼 SQL_Beginner 的回复:] [quote=引用 53 楼 DBA_Huangzj 的回复:] 这个我知道,还有它的逻辑读,5次64938,这个数是不是可以解释为每个线程读取64938/5个数据页(前提是平均)?[quote=引用 52 楼 SQL_Beginner 的回复:] [quote=引用 51 楼 DBA_Huangzj 的回复:] [quote=引用 50 楼 SQL_Beginner 的回复:] [quote=引用 49 楼 DBA_Huangzj 的回复:] [quote=引用 46 楼 u013636081 的回复:] [quote=引用 44 楼 DBA_Huangzj 的回复:] 33楼的方法你试一下
有索引的 删除索引后的 看不懂 说明啥[/quote]目测开了5个线程,
引用 48 楼 SQL_Beginner 的回复:
[quote=引用 45 楼 DBA_Huangzj 的回复:] 从43楼来看,缺失了索引性能下降了85.57%(理论值)
但是人家是parallel table scan呢[/quote]这样容易出现CXPACT吧?[/quote] 没有附加的过滤条件的话,每个线程处理的页面应该会分配的比较均匀。 你可以看XML的执行计划嘛, 。。。。。 RunTimeCountersPerThread Thread="X" ActualRows=XXXX 是不是分配均匀[/quote]那可不可以说如果没有过久的CXPACKT等待的话,并行是可接受的?[/quote] 单个session的话,并行比串行虽然快,但是会消耗更多的系统资源,所以并行会影响并发, OLAP的没问题,OLTP还是尽量不让并行,大部分情况下有并行说明语句可以优化,或者不适合OLTP。[/quote][/quote] 应该是总共吧,你可以测试一下嘛[/quote][/quote] 大神,你的测试咋样?求分享?[/quote]最近比较忙,不过这个不是重点。
MootShao 2014-03-17
  • 打赏
  • 举报
回复
引用 56 楼 DBA_Huangzj 的回复:
你说把max_dop设为1然后再测试是吧?,下班,有空测测[quote=引用 54 楼 SQL_Beginner 的回复:] [quote=引用 53 楼 DBA_Huangzj 的回复:] 这个我知道,还有它的逻辑读,5次64938,这个数是不是可以解释为每个线程读取64938/5个数据页(前提是平均)?[quote=引用 52 楼 SQL_Beginner 的回复:] [quote=引用 51 楼 DBA_Huangzj 的回复:] [quote=引用 50 楼 SQL_Beginner 的回复:] [quote=引用 49 楼 DBA_Huangzj 的回复:] [quote=引用 46 楼 u013636081 的回复:] [quote=引用 44 楼 DBA_Huangzj 的回复:] 33楼的方法你试一下
有索引的 删除索引后的 看不懂 说明啥[/quote]目测开了5个线程,
引用 48 楼 SQL_Beginner 的回复:
[quote=引用 45 楼 DBA_Huangzj 的回复:] 从43楼来看,缺失了索引性能下降了85.57%(理论值)
但是人家是parallel table scan呢[/quote]这样容易出现CXPACT吧?[/quote] 没有附加的过滤条件的话,每个线程处理的页面应该会分配的比较均匀。 你可以看XML的执行计划嘛, 。。。。。 RunTimeCountersPerThread Thread="X" ActualRows=XXXX 是不是分配均匀[/quote]那可不可以说如果没有过久的CXPACKT等待的话,并行是可接受的?[/quote] 单个session的话,并行比串行虽然快,但是会消耗更多的系统资源,所以并行会影响并发, OLAP的没问题,OLTP还是尽量不让并行,大部分情况下有并行说明语句可以优化,或者不适合OLTP。[/quote][/quote] 应该是总共吧,你可以测试一下嘛[/quote][/quote] 大神,你的测试咋样?求分享?
微wx笑 2014-03-12
  • 打赏
  • 举报
回复
小白求教,CXPACKT是什么意思?
LongRui888 2014-03-10
  • 打赏
  • 举报
回复
please post your statement execution plan
KevinLiu 2014-03-10
  • 打赏
  • 举报
回复
It's better to post your excution plan here,index is not used sometimes.
發糞塗牆 2014-03-10
  • 打赏
  • 举报
回复
给你一把斧头和一个刀片,你用刀片去砍树,用斧头来切纸,然后说这两个工具都很烂,你觉得对不?索引也类似,没有最好,只有最合适
唐诗三百首 2014-03-10
  • 打赏
  • 举报
回复
这个涉及执行成本的问题, 当需要返回的数据量大于总数据量的20%时,系统会直接全表扫描而不用索引. 所以即使有索引的情况下,执行执行select * from [表名],也会走全表扫描的.
KevinLiu 2014-03-10
  • 打赏
  • 举报
回复
引用 7 楼 SQL_Beginner 的回复:
“不是说索引会提高查询速度吗?” 索引不一定会提高性能,合适的索引才会提高性能
好久不见了啊,新工作怎么样?
  • 打赏
  • 举报
回复
“不是说索引会提高查询速度吗?” 索引不一定会提高性能,合适的索引才会提高性能
LongRui888 2014-03-10
  • 打赏
  • 举报
回复
索引之所以快,是因为只需要访问这个表中的少量数据。 比如你说你的表有500万条数据,那么一般如果你只是访问其中的10%左右的数据,那么用索引才会显的比较快,比如: select * from 表 where 加索引的那一列 = xxx 或者 select * from 表 where 加索引的那一列 between 123 and 456 这样查询才能快。 如果是: select * from 表 速度肯定是一样的。
以学习为目的 2014-03-10
  • 打赏
  • 举报
回复
看楼主的测试数据说明,估计直接用的 select * from tab_test,所以加不加索引查询就没有什么区别了
直面人生 2014-03-10
  • 打赏
  • 举报
回复
您首先得有效使用索引,避免全表扫描.
--小F-- 2014-03-10
  • 打赏
  • 举报
回复
看你的查询语句 看你的执行计划。
lzw_0736 2014-03-10
  • 打赏
  • 举报
回复
select * from 表 where 字段=條件時,索引才有用 select * from 表 索引無用
Yole 2014-03-10
  • 打赏
  • 举报
回复
加索引您得按照索引去检索啊;如果都是全盘扫描,加啥都没用!
  • 打赏
  • 举报
回复
引用 56 楼 DBA_Huangzj 的回复:
你说把max_dop设为1然后再测试是吧?,下班,有空测测[quote=引用 54 楼 SQL_Beginner 的回复:] [quote=引用 53 楼 DBA_Huangzj 的回复:] 这个我知道,还有它的逻辑读,5次64938,这个数是不是可以解释为每个线程读取64938/5个数据页(前提是平均)?[quote=引用 52 楼 SQL_Beginner 的回复:] [quote=引用 51 楼 DBA_Huangzj 的回复:] [quote=引用 50 楼 SQL_Beginner 的回复:] [quote=引用 49 楼 DBA_Huangzj 的回复:] [quote=引用 46 楼 u013636081 的回复:] [quote=引用 44 楼 DBA_Huangzj 的回复:] 33楼的方法你试一下
有索引的 删除索引后的 看不懂 说明啥[/quote]目测开了5个线程,
引用 48 楼 SQL_Beginner 的回复:
[quote=引用 45 楼 DBA_Huangzj 的回复:] 从43楼来看,缺失了索引性能下降了85.57%(理论值)
但是人家是parallel table scan呢[/quote]这样容易出现CXPACT吧?[/quote] 没有附加的过滤条件的话,每个线程处理的页面应该会分配的比较均匀。 你可以看XML的执行计划嘛, 。。。。。 RunTimeCountersPerThread Thread="X" ActualRows=XXXX 是不是分配均匀[/quote]那可不可以说如果没有过久的CXPACKT等待的话,并行是可接受的?[/quote] 单个session的话,并行比串行虽然快,但是会消耗更多的系统资源,所以并行会影响并发, OLAP的没问题,OLTP还是尽量不让并行,大部分情况下有并行说明语句可以优化,或者不适合OLTP。[/quote][/quote] 应该是总共吧,你可以测试一下嘛[/quote][/quote] 嗯,然后再看看每个线程处理的行数是不是大致相等。
發糞塗牆 2014-03-10
  • 打赏
  • 举报
回复
你说把max_dop设为1然后再测试是吧?,下班,有空测测
引用 54 楼 SQL_Beginner 的回复:
[quote=引用 53 楼 DBA_Huangzj 的回复:] 这个我知道,还有它的逻辑读,5次64938,这个数是不是可以解释为每个线程读取64938/5个数据页(前提是平均)?[quote=引用 52 楼 SQL_Beginner 的回复:] [quote=引用 51 楼 DBA_Huangzj 的回复:] [quote=引用 50 楼 SQL_Beginner 的回复:] [quote=引用 49 楼 DBA_Huangzj 的回复:] [quote=引用 46 楼 u013636081 的回复:] [quote=引用 44 楼 DBA_Huangzj 的回复:] 33楼的方法你试一下
有索引的 删除索引后的 看不懂 说明啥[/quote]目测开了5个线程,
引用 48 楼 SQL_Beginner 的回复:
[quote=引用 45 楼 DBA_Huangzj 的回复:] 从43楼来看,缺失了索引性能下降了85.57%(理论值)
但是人家是parallel table scan呢[/quote]这样容易出现CXPACT吧?[/quote] 没有附加的过滤条件的话,每个线程处理的页面应该会分配的比较均匀。 你可以看XML的执行计划嘛, 。。。。。 RunTimeCountersPerThread Thread="X" ActualRows=XXXX 是不是分配均匀[/quote]那可不可以说如果没有过久的CXPACKT等待的话,并行是可接受的?[/quote] 单个session的话,并行比串行虽然快,但是会消耗更多的系统资源,所以并行会影响并发, OLAP的没问题,OLTP还是尽量不让并行,大部分情况下有并行说明语句可以优化,或者不适合OLTP。[/quote][/quote] 应该是总共吧,你可以测试一下嘛[/quote]
發糞塗牆 2014-03-10
  • 打赏
  • 举报
回复
你说把max_dop设为1然后再测试是吧?
  • 打赏
  • 举报
回复
引用 53 楼 DBA_Huangzj 的回复:
这个我知道,还有它的逻辑读,5次64938,这个数是不是可以解释为每个线程读取64938/5个数据页(前提是平均)?[quote=引用 52 楼 SQL_Beginner 的回复:] [quote=引用 51 楼 DBA_Huangzj 的回复:] [quote=引用 50 楼 SQL_Beginner 的回复:] [quote=引用 49 楼 DBA_Huangzj 的回复:] [quote=引用 46 楼 u013636081 的回复:] [quote=引用 44 楼 DBA_Huangzj 的回复:] 33楼的方法你试一下
有索引的 删除索引后的 看不懂 说明啥[/quote]目测开了5个线程,
引用 48 楼 SQL_Beginner 的回复:
[quote=引用 45 楼 DBA_Huangzj 的回复:] 从43楼来看,缺失了索引性能下降了85.57%(理论值)
但是人家是parallel table scan呢[/quote]这样容易出现CXPACT吧?[/quote] 没有附加的过滤条件的话,每个线程处理的页面应该会分配的比较均匀。 你可以看XML的执行计划嘛, 。。。。。 RunTimeCountersPerThread Thread="X" ActualRows=XXXX 是不是分配均匀[/quote]那可不可以说如果没有过久的CXPACKT等待的话,并行是可接受的?[/quote] 单个session的话,并行比串行虽然快,但是会消耗更多的系统资源,所以并行会影响并发, OLAP的没问题,OLTP还是尽量不让并行,大部分情况下有并行说明语句可以优化,或者不适合OLTP。[/quote][/quote] 应该是总共吧,你可以测试一下嘛
發糞塗牆 2014-03-10
  • 打赏
  • 举报
回复
这个我知道,还有它的逻辑读,5次64938,这个数是不是可以解释为每个线程读取64938/5个数据页(前提是平均)?
引用 52 楼 SQL_Beginner 的回复:
[quote=引用 51 楼 DBA_Huangzj 的回复:] [quote=引用 50 楼 SQL_Beginner 的回复:] [quote=引用 49 楼 DBA_Huangzj 的回复:] [quote=引用 46 楼 u013636081 的回复:] [quote=引用 44 楼 DBA_Huangzj 的回复:] 33楼的方法你试一下
有索引的 删除索引后的 看不懂 说明啥[/quote]目测开了5个线程,
引用 48 楼 SQL_Beginner 的回复:
[quote=引用 45 楼 DBA_Huangzj 的回复:] 从43楼来看,缺失了索引性能下降了85.57%(理论值)
但是人家是parallel table scan呢[/quote]这样容易出现CXPACT吧?[/quote] 没有附加的过滤条件的话,每个线程处理的页面应该会分配的比较均匀。 你可以看XML的执行计划嘛, 。。。。。 RunTimeCountersPerThread Thread="X" ActualRows=XXXX 是不是分配均匀[/quote]那可不可以说如果没有过久的CXPACKT等待的话,并行是可接受的?[/quote] 单个session的话,并行比串行虽然快,但是会消耗更多的系统资源,所以并行会影响并发, OLAP的没问题,OLTP还是尽量不让并行,大部分情况下有并行说明语句可以优化,或者不适合OLTP。[/quote]
加载更多回复(40)

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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