2012-03-04 95 views
1

我正在使用MyISAM唯一的數據庫,並且大表上的更新花費了太多時間。桌子的大小約爲30GB(MYD和MYI各15GB)。無論如何,除了看索引,我還可以提高速度嗎?優化更新聲明

+0

沒有看到你的表結構nd更新查詢是非常困難的。請提供更多信息。 – 2012-03-04 07:07:14

回答

1

的MyISAM鍵緩存調整: http://docs.oracle.com/cd/E19957-01/mysql-refman-5.4/optimization.html#myisam-key-cache

一般性能優化:(有很多) http://docs.oracle.com/cd/E19957-01/mysql-refman-5.5/optimization.html

30 GB是相當大的,你運行一個高端服務器?

+0

Mysql消耗超過100%的CPU,有時CPU顯示30-50%的最高輸出。這是正常的嗎?另一個問題是,如果我在更新記錄之前選擇,是否會使用緩存? – shantanuo 2012-03-04 07:23:42

+0

取決於它運行的機器。我已經在這個太高的地方運行了小型服務器,並且我一直在共享網絡主機上,因爲它運行的是24個核心,所以100%cpu時間不算什麼。然而,即使對於具有許多內核和大量內存的服務器,30GB也是相當高的(許多高端服務器在2012年只能處理32-64個內存)。如果你有一小部分查詢被頻繁訪問,那麼它可能是好的。如果你正在查詢一個大集合,並且沒有太多的db存儲在RAM中,那麼你的大瓶頸就是需要將這些文件從光盤分頁到RAM中。 – SinisterRainbow 2012-03-17 02:25:00

1

如果您正在加載大量數據,請查看批量插入命令,或根據具體情況加載數據infile。

如果你正在做大量的插入,可能值得在插入之前測試關鍵的禁用。它可能有助於加快速度。

使用

insert into myTable values("rec1","hello"),("rec2","world"),("rec3","cheesy huh"); 

將在1條語句插入3條記錄 - 同樣,你需要對其進行測試。

我已經完成了這種形式的插入與成千上萬的行,它在我的例子中效果很好。

0

一些筆記可以interessting:

  • 更改存儲引擎(InnoDB的是高容量表更好)
  • Partitionate您的表(或整個DB)劃分爲多個邏輯片(如數據按年,本月,區域等),所以表格會更多,但較小的
  • 確保MySQL的加入緩衝區的大小和類似的指標是足夠大的快速交付