志當存高遠,功到自然成!

          少年強則中國強,少年進步則中國進步!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            53 Posts :: 2 Stories :: 2 Comments :: 0 Trackbacks

          聚簇索引和非聚簇索引都是為了增加數據檢索速度而存在的.

          在配置上, 每個表只能有一個聚簇索引,而能有200多個非聚簇索引。

          在物理分配上, 每個表的數據都是分配在頁上,一個頁大概有8k左右,假設一條數據占1000字節的話,那么8000條數據占8000*1k/8k = 1000頁面,這些數據存在于數據塊中。

          如果對這些數據中的某一10字節的字段做聚簇索引的話,8000 * 0.01K /8 = 10 頁面,那么10頁面作為存儲這些索引而存在。并存放于索引塊  

          如果對這些數據中的某一10字節的字段做非聚簇索引的話,2 * 8000 * 0.01K /8 = 20 頁面,那么20頁面作為存儲這些索引而存在。并存放于索引塊。乘2 的原因請看以下敘述。

          在功能上,      聚簇索引后,數據按照索引的順序來排序,所以索引所指向的就是數據層里對應的相關數據。

                          非聚簇索引后,數據不會按照索引的順序來排序,所以數據庫會先按字理或邏輯先生成首層索引, 再根據首層索引生成第二層索引,第二層索引

          所指向的才是數據層里對應的相關數據。

          在性能上,      聚簇索引在大多數的情況下對該索引的查詢操作性能是最好的,查詢先通過索引層(按上述的例子中,最多需要搜索10頁)找到對應數據存在位置,就算是多條符合記錄的數據,也是在旁邊的數據位置中就能找到

                          非聚簇索引在大多數的情況下對該索引的查詢操作性能比聚簇索引稍次,查詢也先通過首層索引(按上述的例子中,最多搜索10頁)找到對應第二層索引存在位置,由第二層索引層再找到數據的物理位置。

           

                          索引雖然可以增加查詢速度,但也有以下缺陷,需要在設置時注意

          1.     占用空間,雖然索引塊增長速度不如數據塊那么急劇,但畢竟也是消耗空間的。

          2.     select * 的訪問語句時, 數據庫會先搜索聚簇和非聚簇索引的索引塊的索引,再搜索數據塊,這種情況下表里完全不設索引的性能高于設了聚簇索引的性能(按上例要額外搜索10個頁),設了聚簇的性能比設非聚簇的要好(按上例非聚簇要額外搜索20個頁)



          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 寿光市| 辽阳市| 余庆县| 绍兴县| 涡阳县| 扎赉特旗| 九龙县| 木里| 淮滨县| 墨江| 山阴县| 连云港市| 丘北县| 同心县| 阳曲县| 泉州市| 平潭县| 宜兴市| 海安县| 河间市| 马公市| 高要市| 公安县| 那坡县| 北票市| 疏勒县| 临武县| 三门县| 廊坊市| 安陆市| 浮山县| 长岛县| 腾冲县| 神池县| 平和县| 上饶县| 加查县| 哈密市| 高雄县| 于田县| 专栏|