Re: [SQL ] 非丛集索引扫描

楼主: jengting (~~)   2014-09-05 15:54:22
※ 引述《BigLoser (大鲁蛇)》之铭言:
: 最近看了一个mssql 2012的数据库,
: 索引的报表里面有一个index,被index scan的机率还不低,
: 而且这个table没有做PK,不过这个index有设唯一,
: 网络上看到说,如果你的PK被index scan那状况就是table scan,
: 那我现在这个状况也是table scan吗?
: 需要改善查询语法吗?
: 谢谢喔
透过 SSMS 内建立 Primary Key 默认就是 Clustered Index,
根据有没有 Clustered Index 可以把 Table 分为两种架构,
1. 没有 Clustered Index 的架构 - Heap,会是 Table Scan
2. 有 Clustered Index 的架构 - B-Tree,会是 Index Scan
建立一个 Table,透过执行计画就可以观察到有没有 Clustered Index 的 Scan 模式
通常会建议要建立 Clustered Index,假如没有明确的 Primary Key 字段,
可以建立一个 identity 或 Sequence 字段来当 Primary Key
这一点可以 Google "sql heap vs clustered index" 可以找到参考资料
个人意见:Index Scan 或 Table Scan 应该不是重点,
重点是 Scan 代表 T-SQL 并没有充分发挥索引
作者: BigLoser (大鲁蛇)   2014-09-05 18:39:00
先谢谢你,其实你说的我是知道的,只是对于index scan这个东西不太了解,所以想问一下,PK -> table scanindex -> index scan 那 index scan是会比table s 快还是更慢(?)呢..我觉得奇怪的是在这边
作者: sai25 (hyde)   2014-09-06 11:58:00
只要不是SEEK都不会快 讨论TABLE SCAN或INDEX SCAN谁快可能不太有意义 应该是都不快..重点是要SEEK不过这两个要比的话 应该是index比较快吧
作者: BigLoser (大鲁蛇)   2014-09-06 14:58:00
谢谢,我知道的确是没什么意义,只是对这个东西不太了解那个数据库和程式端都不是我在管的=_=只是无聊进去看一下发现的..已告知负责的人修改
作者: rockchangnew (rock)   2014-09-07 17:15:00
Index scan会比较快,因为资料量的关系但如果index无法满足查询,需在scan过程回table取资料则index scan会比较慢
楼主: jengting (~~)   2014-09-09 08:39:00
SQL Server 是 Costly-base 而不是 Rule-base,针对某一个点讨论效能其实没有意义
作者: BigLoser (大鲁蛇)   2014-09-09 09:35:00
也是,学习了! 谢谢

Links booklink

Contact Us: admin [ a t ] ucptt.com