簡體   English   中英

將MEMORY表中的百萬條記錄移至MYISAM表

[英]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

原則上,您應通過以下方式獲得良好的表現:

  1. 創建沒有二級索引的目標表。

  2. 在目標表的主鍵上對源表的內容進行排序。

  3. 將已排序的記錄插入目標表。

  4. 一次添加一個二級索引。

這可能主要是關於調整。 MyISAM表最初是空的嗎? 如果是這樣,你可以做一些作弊 - 在加載期間禁用索引,然后啟用它們(這對非空表不是一個好主意)。

在內存表上執行ORDER BY並不是一個特別好的主意,因為它們通常使用哈希索引,因此無法進行有序索引掃描,因此會引入額外的filesort(),這可能很糟糕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM