2016-04-29 55 views
1

我有500萬行數據庫,但內部連接和IN需要很長時間(55秒,60秒)。所以我正在檢查MyISAM設置是否有問題。如何調整MySQL的存儲引擎

查詢: SHOW STATUS LIKE '鍵%'

+------------------------+-------------+ 
| Variable_name   | Value  | 
+------------------------+-------------+ 
| Key_blocks_not_flushed | 0   | 
| Key_blocks_unused  | 275029  | 
| Key_blocks_used  | 3316428  | 
| Key_read_requests  | 11459264178 | 
| Key_reads    | 3385967  | 
| Key_write_requests  | 91281692 | 
| Key_writes    | 27930218 | 
+------------------------+-------------+ 

給我你的建議,增加的MyISAM的性能

+0

MyISAM是一個可怕的數據庫引擎。使用InnoDB如果可以的話,MyISAM將擁有很多功能,例如記錄日誌,並且不會發生爆炸,並且如果數據損壞則會丟失所有數據。 – tadman

+0

由於某些原因,我不能改變引擎,如果現在不完全是這樣的效果......但我們正在使用大量的讀取數據......這是最好的MyISAM –

+0

MyISAM對於任何事情都不是「最好的」。它是從20世紀90年代開始的,十多年來一直沒有受到太多關注。 InnoDB始終易於擴展,MySQL 5.0到5.7的性能已經有了巨大的提升。我希望你最終能夠改變這種情況,你可以在InnoDB的引擎上投入大量的內存,並使其與MyISAM相比飛行。 – tadman

回答

1

我有更多然後45GB數據庫的工作,我也面臨性能問題,

下面是我爲提高性能而採取的一些stpes。 (1)刪除表中所有不必要的索引,特別注意UNIQUE索引,因爲這些索引會禁用更改緩衝。如果您沒有該約束的理由,則不要使用UNIQUE索引;更喜歡常規的INDEX。 (2)按順序插入將導致更少的頁面拆分(對於不在內存中的表格執行更差),並且批量加載與表格大小沒有特別的關係,但它有助於減少重做日誌壓力。 (3)如果批量加載新表,則延遲創建除PRIMARY KEY之外的任何索引。如果您在加載所有數據後創建它們,那麼InnoDB就能夠應用預分類和批量加載過程,該過程既快又簡單,而且結果通常更緊湊。這個優化在MySQL 5.5中成爲現實。

(4)確保使用InnoDB,而不是MyISAM。 MyISAM可以更快地插入到表格的末尾。 Innodb的是行級鎖定和MYISAM是表級鎖定

(5)儘量避免複雜的SELECT查詢上MyISAM表經常更新,並使用查詢等,其返回關於第一條件少導致

(6)對於頻繁更改的MyISAM表,儘量避免使用所有可變長度的列(VARCHAR,BLOB和TEXT)。該表使用動態行格式(如果它甚至包括單個可變長度列)

+0

要從MyISAM更改爲INNO,我應用了哪些命令和設置請發送給我命令 –

+0

如果您想要更改表引擎,請使用'ALTER TABLE t1 ENGINE = InnoDB;' –

+0

有關轉換的小問題,請參見http:// mysql.rjweb.org/doc.php/myisam2innodb –