2009-12-17 23 views
2

假設一個MySQL MyISAM表,其中包含一個千兆字節的數據和一個千兆字節的索引。調整MySQL以便在開發過程中快速創建列/索引

此外,假設在開發過程中,列和索引將被頻繁地添加到表中或從表中刪除/移除。由於數據庫的大小,使用標準的非調整MySQL設置時,創建列/索引速度較慢。

應調整哪些MySQL服務器參數以最小化添加新列/索引所需的時間?

+0

一個沉悶的問題:爲什麼不減少數據集的整體大小? – Romain 2009-12-17 19:46:35

+0

Romain:由於某些應用程序的具體要求,在這種情況下根本無法實現。但在其他一些情況下,這可能是最簡單的解決方案。 – knorv 2009-12-17 19:47:47

回答

4

我相信你應該看的關鍵設置是key_buffer_size,myisam_max_sort_file_sizemyisam_sort_buffer_sizekey_buffer_size是MyISAM總體上最重要的設置之一,但其他兩個可能需要一些解釋。

http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html

myisam_max_sort_file_size

,MySQL的被允許使用的 而重新創建一個MyISAM索引 (修復表中臨時 文件的最大尺寸,ALTER TABLE ,或者 LOAD DATA INFILE)。如果文件大小 將大於此值,則使用密鑰緩存 來創建 索引,而該緩存會更慢。值是以字節給出的 。

默認值是2GB。如果MyISAM 索引文件超過此大小並且磁盤空間可用 ,則增加 值可能有助於提高性能。

myisam_sort_buffer_size

這是一個REPAIR TABLE中排序的MyISAM索引 或創建 索引與CREATE INDEX或ALTER TABLE 時當分配 的緩衝區的大小。

myisam_sort_buffer_size的最大允許設置爲4GB。

所以,基本上,如果您希望您的索引大於myisam_max_sort_file_size,那麼您可能需要考慮調整它。否則,myisam_sort_buffer_size可能值得注意。

請記住,在MyISAM表上創建索引會鎖定整個表。如果你在大型桌面上不停地做這個事情,無論你調整了多少設置,你都會遇到一些嚴重的性能問題。

3

以下是一些提示。

  1. 設置key_buffer_size存儲索引所需的內存。分配的大小應該大於需要編制索引的列*所需的大小。在你的情況下,它應該大於1 GB,因爲你已經提到索引大小爲1 GB。對於MyISAM引擎,索引可以存儲在內存中,而不是數據。

  2. 如果需要在varchar字段上創建索引,請限制用於索引的字節數。例如,如果一列是varchar(500),那麼在此創建索引將是一個過度殺手,如果MySQL能夠通過僅使用前幾個字符將範圍縮小到幾條記錄,那麼這將是沒有用的。例如5個字符。

  3. 要添加新列,MySQL必須創建一個臨時表並將所有數據與新列值一起復制。爲了避免這種情況,最好使用主表和新列的主鍵創建一個新表。

希望這會有所幫助。