2010-06-05 26 views
1

什麼是MySQL的MySQL的數據和索引一般Unique Indexes性能特性(如Primary Key Index):Mysql:Unique Index =大數據集的性能特徵?

鑑於我將插入或更新我的DATABSE紀錄:請問更新記錄(=建築的速度/更新索引)會有所不同,如果該表有10千條記錄而不是1億條記錄。或者換句話說,改變一行後的索引構建時間是否取決於總索引大小?

這是否也適用於在MySQL任何其他指標,如主鍵索引?

非常感謝您 湯姆

回答

3

在MySQL中的大多數指標實際上是一樣的內部 - 他們的B-tree數據結構。如此,更新B樹索引是O(log n)操作。所以,隨着索引中條目的數量增加,成本會更高,但並不是很糟糕。

一般情況下,從索引獲得遠遠超過更新它的成本效益。

+0

的確如此,和@湯姆:牢記:使用InnoDB表時,有一個主索引無論您有一個在你的表定義或沒有,還不如成爲一個都看得到的主鍵。 – Wrikken 2010-06-05 02:34:58

+0

對於InnoDB,如果您沒有定義主鍵,那麼在創建自己的聚簇索引之前,MySQL實際上會使用您的第一個NOT NULL唯一索引作爲主鍵(和聚簇索引)。 http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html – 2010-06-05 02:56:57

1

典型的MySQL實現的指標是一組分類值(不知道任何存儲引擎使用不同的策略,但我相信這對於這款流行的) - 因此,更新索引不可避免地需要更長的時間爲它增長。然而,減速不一定非常糟糕 - 在一個有N個鍵的排序索引中定位一個鍵是O(log N),並且可能(儘管不是微不足道的)在步驟之後進行更新O(1)(至少在攤銷意義上)發現。因此,如果您按照您的示例對記錄數進行平方,並且選擇具有高度優化實現的存儲引擎,則可以合理地希望索引更新在大表上的大小與在小表上的大小相比只有兩倍。

0

注意,如果新的主鍵值總是比前面的(即自動增量整數字段)越大,你的索引不會需要重建。