最近,我發現其中一臺服務器在磁盤上有很高的I/O流量。由於某些診斷後在某個表上寫入索引而導致的高I/O。我已經做了幾次評估測試,發現在將記錄插入到索引較大的表中時,mysql會佔用大量的寫入空間。大索引插入性能下降(MYSQL)
索引列的數據類型是VARCHAR(15)和varchar(17),兩者都是非唯一索引 僅存在80寫在磁盤上,如果我加載20000個記錄到具有10000條記錄,而有表1700在表增長到2000萬(在索引列上獲得大約1百萬個不同值)時在磁盤上寫入,即使插入的記錄數量相同。
引擎是MyISAM。
增加索引的大小也會增加每個插入磁盤的寫入次數。
它是BTREE指數的行爲,我該如何解決這個問題?
感謝您的回覆,是否有任何其他可能的方式來減少索引寫入的I/O,因爲表處於生產環境中,而不喜歡更改其引擎。另外,昂貴的I/O是BTREE的性質還是任何原因造成的。 – Holylai
非常感謝您的明確解釋,這意味着當葉子節點發生溢出時,由於分割節點的操作導致的I/O,並且樹增長時花費太多?因爲我不是很懂B樹的算法,這種行爲追加到所有的RDBMS如ORACLE(儘管在緩衝I/O) – Holylai
我知道了,感謝這麼多,但爲什麼主索引不會造成這樣的問題? – Holylai