我正在使用MyISAM唯一的數據庫,並且大表上的更新花費了太多時間。桌子的大小約爲30GB(MYD和MYI各15GB)。無論如何,除了看索引,我還可以提高速度嗎?優化更新聲明
優化更新聲明
回答
的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是相當大的,你運行一個高端服務器?
Mysql消耗超過100%的CPU,有時CPU顯示30-50%的最高輸出。這是正常的嗎?另一個問題是,如果我在更新記錄之前選擇,是否會使用緩存? – shantanuo 2012-03-04 07:23:42
取決於它運行的機器。我已經在這個太高的地方運行了小型服務器,並且我一直在共享網絡主機上,因爲它運行的是24個核心,所以100%cpu時間不算什麼。然而,即使對於具有許多內核和大量內存的服務器,30GB也是相當高的(許多高端服務器在2012年只能處理32-64個內存)。如果你有一小部分查詢被頻繁訪問,那麼它可能是好的。如果你正在查詢一個大集合,並且沒有太多的db存儲在RAM中,那麼你的大瓶頸就是需要將這些文件從光盤分頁到RAM中。 – SinisterRainbow 2012-03-17 02:25:00
如果您正在加載大量數據,請查看批量插入命令,或根據具體情況加載數據infile。
如果你正在做大量的插入,可能值得在插入之前測試關鍵的禁用。它可能有助於加快速度。
使用
insert into myTable values("rec1","hello"),("rec2","world"),("rec3","cheesy huh");
將在1條語句插入3條記錄 - 同樣,你需要對其進行測試。
我已經完成了這種形式的插入與成千上萬的行,它在我的例子中效果很好。
一些筆記可以interessting:
- 更改存儲引擎(InnoDB的是高容量表更好)
- Partitionate您的表(或整個DB)劃分爲多個邏輯片(如數據按年,本月,區域等),所以表格會更多,但較小的
- 確保MySQL的加入緩衝區的大小和類似的指標是足夠大的快速交付
- 1. 在MariaDB中優化1次SQL更新聲明
- 2. Oracle更新聲明
- 3. SQL更新聲明
- 4. Postgresql更新聲明
- 5. MySQL聲明的性能和優化
- 6. 請幫我優化這個Linq聲明
- 7. 優化紅寶石檢測聲明
- 8. 優化函數聲明位置
- 9. MySql更新優化?
- 10. 優化QListView更新
- 11. Oracle - 優化更新
- 12. LINQ聲明優化 - 尋求更好設計的建議
- 13. 更新甲骨文聲明
- 14. 加入更新聲明
- 15. 限額更新聲明
- 16. Android - SQLite更新聲明
- 17. ASP.NET更新GridView的聲明
- 18. SQL Server更新聲明
- 19. SQL大寫更新聲明
- 20. 更新ClaimPrincipal中的聲明
- 21. Java中的更新聲明
- 22. 內聯SQL更新聲明
- 23. fetch_assoc()中的更新聲明
- 24. 需要更新Oracle聲明
- 25. 優化更新查詢
- 26. 優化PostgreSQL的更新
- 27. Java MySQL更新優化
- 28. 優化更新語句
- 29. 優化MySQL Subselect更新
- 30. 簡化聲明
沒有看到你的表結構nd更新查詢是非常困難的。請提供更多信息。 – 2012-03-04 07:07:14