測試查詢速度
當我第一次執行查詢時,執行需要 x 毫秒。當我第二次執行它時,它需要的時間要少得多。我假設它是這種機制中涉及的一些記憶體,但我需要知道我的查詢的實際速度是多少。
- 我可以在查詢指令之後重置記憶體,或者類似的東西嗎?
- 在開發階段,您使用什麼來查看查詢速度?
- 你能給我一個有用的資源/工具/教程/部落格來閱讀這個東西/功能/問題嗎?
順便說一句,我在 Windows (XAMPP) 中使用 Apache、MySQL 和 PHP。
就個人而言,我傾向於在開發時使用第二次和後續執行作為我的基準,因此這個答案……
可以說,真正的速度是記憶體數據和執行計劃。
如果它的執行頻率足夠重要,那麼它將在現實生活中被記憶體。您正在第二次測量性能。對於第一次執行,您正在測量載入/編譯時間。
在生產伺服器上,數據也會因為使用而被記憶體,但在開發時不會。
它每天執行一次,或者作為偶爾的報告執行,那麼這並不重要(在合理範圍內)。
您可能希望施加壓力測試環境以盡可能實時地獲取查詢結果。例如,MyISAM Key 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。
這樣做應該使所有查詢每次都以最低限度的最佳(或最差)執行。
試一試 !!!