[英]Move million records from MEMORY table to MYISAM table
我正在尋找一種快速的方法將記錄從MEMORY表移動到MYISAM表。 MEMORY表有大約50萬條記錄。 兩個表具有完全相同的結構(相同數量的列,數據類型等)。 但MYISAM表在幾列上被索引(B-TREE)。 大約有25列,其中大多數是無符號整數。
我已經嘗試過使用“INSERT INTO SELECT * FROM”查詢。 但有沒有更快的方法呢?
感謝您的幫助。
PRASHANT
其他人指出 - 在插入過程中不應使用索引。 您可以在每個插入時禁用更新它們:
ALTER TABLE table DISABLE KEYS;
INSERT INTO table
ALTER TABLE tbl_name ENABLE KEYS;
並鎖定表以獲取單個索引:
LOCK TABLES table WRITE;
INSERT INTO table
UNLOCK TABLES;
無論如何,如果你在單個INSERT ... SELECT
使用它,你可能無法獲得顯着的性能提升。
您還可以在服務器配置中調整bulk_insert_buffer_size
設置。
更多信息: http : //dev.mysql.com/doc/refman/5.0/en/insert-speed.html
原則上,您應通過以下方式獲得良好的表現:
創建沒有二級索引的目標表。
在目標表的主鍵上對源表的內容進行排序。
將已排序的記錄插入目標表。
一次添加一個二級索引。
這可能主要是關於調整。 MyISAM表最初是空的嗎? 如果是這樣,你可以做一些作弊 - 在加載期間禁用索引,然后啟用它們(這對非空表不是一個好主意)。
在內存表上執行ORDER BY並不是一個特別好的主意,因為它們通常使用哈希索引,因此無法進行有序索引掃描,因此會引入額外的filesort(),這可能很糟糕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.