※ 引述《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