Mysql

測試查詢速度

  • March 2, 2012

當我第一次執行查詢時,執行需要 x 毫秒。當我第二次執行它時,它需要的時間要少得多。我假設它是這種機制中涉及的一些記憶體,但我需要知道我的查詢的實際速度是多少。

  • 我可以在查詢指令之後重置記憶體,或者類似的東西嗎?
  • 在開發階段,您使用什麼來查看查詢速度?
  • 你能給我一個有用的資源/工具/教程/部落格來閱讀這個東西/功能/問題嗎?

順便說一句,我在 Windows (XAMPP) 中使用 Apache、MySQL 和 PHP。

就個人而言,我傾向於在開發時使用第二次和後續執行作為我的基準,因此這個答案……

可以說,真正的速度是記憶體數據和執行計劃。

如果它的執行頻率足夠重要,那麼它將在現實生活中被記憶體。您正在第二次測量性能。對於第一次執行,您正在測量載入/編譯時間。

在生產伺服器上,數據也會因為使用而被記憶體,但在開發時不會。

它每天執行一次,或者作為偶爾的報告執行,那麼這並不重要(在合理範圍內)。

您可能希望施加壓力測試環境以盡可能實時地獲取查詢結果。例如,MyISAM Ke​​y Buffer(大小由 key_buffer_size 控制)預設為 8MB,最小值為 8(沒錯,8 字節)。它負責保存 .MYI 文件中的索引頁。將此值設置為 8,並且必須一遍又一遍地讀取 MyISAM 中的每個鍵控查找。

這也適用於 InnoDB。預設 InnoDB 緩衝池大小(由 innodb_buffer_pool_size 管理)為 128MB,最小值為 1MB(在 MySQL 5.5 中)。它負責保存來自 .ibd 和/或 ibdata1 文件的數據和索引頁面。將此值設置為 1M,並且 InnoDB 中的每個鍵控查找(始終包括在聚集行索引( gen_clust_index )中的附加查找)必須一遍又一遍地讀取。

為了增加壓力,將 query_cache_type 設置為 0 以強制不記憶體查詢

只需將這三 (3) 個最小值添加到 /etc/my.cnf

[mysqld]
innodb_buffer_pool_size=1M
key_buffer_size=8
query_cache_type=0

並重新啟動 MySQL。

這樣做應該使所有查詢每次都以最低限度的最佳(或最差)執行。

試一試 !!!

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