作者jengting (~~)
看板Database
标题Re: [SQL ] 非丛集索引扫描
时间Fri Sep 5 15:54:22 2014
※ 引述《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 并没有充分发挥索引
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.158.7
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Database/M.1409903664.A.DAC.html
1F:推 BigLoser: 先谢谢你,其实你说的我是知道的,只是对於index scan 09/05 18:39
2F:→ BigLoser: 这个东西不太了解,所以想问一下,PK -> table scan 09/05 18:40
3F:→ BigLoser: index -> index scan 那 index scan是会比table s 快 09/05 18:41
4F:→ BigLoser: 还是更慢(?)呢..我觉得奇怪的是在这边 09/05 18:41
5F:推 sai25: 只要不是SEEK都不会快 讨论TABLE SCAN或INDEX SCAN谁快 09/06 11:58
6F:→ sai25: 可能不太有意义 应该是都不快..重点是要SEEK 09/06 11:59
7F:推 sai25: 不过这两个要比的话 应该是index比较快吧 09/06 14:21
8F:推 BigLoser: 谢谢,我知道的确是没甚麽意义,只是对这个东西不太了解 09/06 14:58
9F:→ BigLoser: 那个资料库和程式端都不是我在管的=_= 09/06 14:59
10F:→ BigLoser: 只是无聊进去看一下发现的..已告知负责的人修改 09/06 14:59
11F:推 rockchangnew: Index scan会比较快,因为资料量的关系 09/07 17:15
12F:推 rockchangnew: 但如果index无法满足查询,需在scan过程回table取 09/07 17:17
13F:→ rockchangnew: 资料则index scan会比较慢 09/07 17:18
14F:→ jengting: SQL Server 是 Costly-base 而不是 Rule-base, 09/09 08:39
15F:→ jengting: 针对某一个点讨论效能其实没有意义 09/09 08:39
16F:推 BigLoser: 也是,学习了! 谢谢 09/09 09:35