Mysql

如何使用大量 ram (128 GB) 來改進 MySQL 5.5 索引創建?

  • August 7, 2013

這與我的另一篇文章類似,但現在我有一個不同的表結構,並且仍然不清楚應該更改哪些 MySQL 參數以利用我的機器擁有的額外記憶體 — 所以如果它看起來像重複,讓我知道如何最好地改寫我要問的內容。

我有下表:create table mytable (id1 int, id2 int, score float) engine MyISAM,有 500 億條記錄。

我計劃在第一列alter table mytable add index myindex (id1)

注意:引擎類型不需要是 MyISAM,如果有區別的話。

您首先關心的是數據載入。由於您不打算擁有一個主鍵,而只是一個索引,因此您應該在按任何 UNIX 風格的索引列 id1 載入數據之前對數據進行排序:

sort -n mytable.txt > mytable.sort

要載入數據,請在 MySQL 提示符下使用 LOAD DATA 的 mysqlimport。為了加快載入速度,MYISAM 表受益於增加 bulk_insert_buffer_sizemyisam_sort_buffer_sizekey_buffer_size,對於 INNODB 表,增加 innodb_buffer_pool_sizeinnodb_log_file_size

這些增加可能還不夠,隨著記憶體填滿,載入仍然可能會減慢。在這種情況下,以塊的形式載入數據效率更高。您可以通過在 mysql 根目錄中執行每小時 du 來監控速度:

#!/bin/bash
while [ 1 ]
do
   du -hs database/.
   sleep 3600
done

僅出於完整性考慮(與此特定情況無關):禁用索引也有助於加快載入過程。

現在查詢:這有點複雜,因為它取決於您的數據以及您想要查詢表的方式。影響性能的最大因素是:

  • 緩衝區:由變數設置。執行您的典型查詢並比較“顯示變數”和“顯示狀態”輸出以確定瓶頸。
  • 索引:你已經介紹過了
  • 聯接:根據您與其他表聯接的方式,

以數據倉庫樣式對錶進行非規範化可能會更好,

特別是如果您想聯接兩個大表。

關於數據載入和大表查詢優化的精彩文章可以在以下網址找到: http ://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/ http://www .mysqlperformanceblog.com/2006/06/09/why-mysql-could-be-slow-with-large-tables/

查看這些和其他變數的預設值和允許值:http: //dev.mysql.com/doc/refman/5.5/en/server-system-variables.html

引用自:https://dba.stackexchange.com/questions/47674