《Mysql入門mysql索引教程之聚集索引》要點:
本文介紹了Mysql入門mysql索引教程之聚集索引,希望對您有用。如果有疑問,可以聯系我們。
MYSQL實例本節內容:
mysql索引之聚集索引
MYSQL實例聚集索引不是一種單獨的索引類型,而是一種存儲數據方式.
其具體細節依賴于實現方式,但是InnoDB的聚集索引實際上在同樣的結構中保存了B-Tree索引和數據行.
MYSQL實例當表有聚集索引的時候,它的數據行實際保存在索引的葉子頁中.術語“聚集”指實際的數據行和相關的鍵值都保存在一起.
每個表只能有一個聚集索引,因為不能一次把行保存在兩個地方.(但是,覆蓋索引可以模擬多個聚集索引)
MYSQL實例當前,SolidDB和InnoDB是唯一支持聚集索引的存儲引擎.InnoDB按照主鍵進行聚集,如果沒有定義主鍵,InnoDB會試著使用唯一的非空索引來代替.如果沒有這種索引,InnoDB就會定義隱藏的主鍵然后在上面進行聚集.
MYSQL實例聚集主鍵有助于性能,但是它也能導致嚴重的性能問題.
MYSQL實例優點:
1,可以把相關數據保存在一起.
2,數據訪問快.聚集索引把索引和數據都保存到同一棵B-Tree中,因此從聚集索引中取得數據通常在非聚集索引進行查找要快.
3,使用覆蓋索引的查詢可以使用包含在葉子節點中的主鍵值
如果表和查詢可以使用它們,這些優點能極大地提高性能.
MYSQL實例缺點:
1,聚集能最大限度地提升I/O密集負載的性能.如果數據能裝入內存,那么其順序也就無怕謂了,這樣聚集就沒什么用處.
2,插入速度嚴重依賴于插入順序.按照主鍵的順序插入行是把數據裝入InnoDB表最快的方法.如果沒有按照主鍵順序插入數據,那么在插入之后最好使用OPTIMIZE TABLE重新組織一下表.
3,更新聚集索引列是昂貴的,因為它強制InnoDB把每個更新的遷移到新的位置.
3,建立在聚集索引上的表在插入新行,或者在行的主鍵被更新,該行必須被移動的時候會進行分頁.分布發生在行的鍵值要求行必須被放到一個已經放滿了數據的頁的時候,此時存儲引擎必須分頁才能容納該行.分頁會導致表占用更多的磁盤空間
4,聚集表可能會比全表掃描慢,尤其在表存儲得比較稀疏或因為分頁而沒有順序存儲的時候.
5,第二(非聚集)索引可能會比預想的大,因為它們的葉子節點包含了被引用行的主鍵列.
6,第二索引訪問需要兩次索引查找,而不是一次(葉子節點不會保存引用的行的物理位置,而是保持了行的主鍵值)
MYSQL實例這意味著為了從第二索引查找行,存儲引擎首先要找到葉子,然后使用保存在那里的主鍵值找到主鍵.最終找到行.這需要兩次動作,兩次B-Tree導航(在InnoDB中,自適應哈希索引能減少這種損失)
MYSQL實例如果正在使用InnoDB并且不需要任何特定的聚集,就可以定義一個代理鍵.它是一種主鍵,但是值和應用程序無關.最簡單的方法是使用AUTO_INCREMENT列.這會是順序插入的并且能提高使用主鍵聯接的性能,減少分頁和碎片產生.
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/6447.html