作者charleshu (Analog Engineer)
看板Database
标题Re: [SQL ] 丛集(cluster)非丛集(noncluster)
时间Thu Apr 15 12:49:57 2010
※ 引述《shiengchyi (上班族之朝九晚六?!)》之铭言:
: 由於目前面临到要处理大量资料(1000w笔),
: 所以在了解关於丛集(cluster)和非丛集(noncluster)的问题,
: 根据我拜请Google大神的结果,
: 一般设定的PKey MSSQL预设是 cluster,每个Table只能有一个(组) PKey,
: 每个Table 也只能有一个cluster index(es),
: 因为cluster index是实际存放在硬体当中的顺序。
: 相较於noncluster index,每个Table 至多可以有 999 个 (By MSDN),
: 针对常用的查询栏位来设定 noncluster index的话,可以有效的增加查询的速度,
: 以上是小弟的了解,以下是用来表达问题的例子:
: Table Map里面有三个栏位:[index](autoIncrease),X,Y;用於纪录某座标发生事件,
: (X,Y)用来表示座标,同一个座标可能发生多个事件,所以增加一个[index]栏位,
: 我的疑问是,我应该三个栏位视为一组Pkey,
: 还是以[index]为PKey,然後将X,Y设定成 ununique noncluster indexes,
: 其目的是为了能够加速资料查询,还请有经验的乡民解惑,感谢 ^^
其实对 database 来说, 1000万笔资料一点都不算大, 我当年用 Oracle 8i做简讯资料库
时, 2~4亿笔资料, Host 是Linux 2.4+SCSI Raid 1 HDD,照样能每秒完成200~300笔交易,
每笔交易约有3~4个Query与1个Insert 或 Update.而且因资料进进出出,新增移除很多,
Table space从来没有重排成连续.
你的问题应该是 Access plan上的问题, 改善Select statement的语法, 找出正确的
index,应该就会改善.
Non-clustered 通常只有在JOIN, WHERE, and ORDER BY clauses时会给你比较多的帮助,
否则不会带来多大的效率改善,O(n)的问题除非改成O(log n),要不然不会有多大的改善的
. 你可以看看MSDN, M$的文件与 Wikipedia
http://en.wikipedia.org/wiki/Index_(database)
有关Non-clustered index的说明就知道了.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.67.195.213