mysql 每次查詢一條數據查10次 和一次查詢10條數據效率有多少差距?
01-15
mysql 每次查詢一條數據查10次 和一次查詢10條數據效率有多少差距?如果擴大查詢量,會拉大之間的查詢效率嗎?
比較笨,技術也趕不上以上兩位大牛,所以就自己動手測試了下。
傳送門:http://dbarobin.com/2015/02/28/sql-query-once-and-ten-times/
希望能給題主一點參考。
量化一下:
1. 一次網路來回0.5毫秒(網路狀況還不錯,網路延遲)2. MySQL查詢1條記錄0.005毫秒,查詢10條記錄也不超過0.01毫秒3. 數據傳輸速度,千兆網卡,128M Bytes/s,1條記錄和10條記錄傳輸時間差距幾乎忽略不計
這樣來看,必須採用1次取10條數據,而不是10次每次取1條數據沒實際試過,僅從理論上分析:A比B慢大約10倍。
如果查詢結果在一個block的大小以內,那麼1次查詢在網路傳輸上的時間基本沒有差別。但是10次查詢需要做10次建立連接、解釋SQL等工作。每次查詢,需要:
- 建立socket連接。
- 解釋SQL語句。
- 構建查詢計劃。
- 從硬碟上讀取數據。
- 返回查詢結果。
- 斷開socket連接。
臆測一下,十倍。
為什麼說是臆測呢,因為我猜這並不是問很極端的情況。詳細說來,拆解每個查詢消耗的時間,並不是每個步驟都與行數有關。
查1行,查10行,網路通訊都是佔大部分時間,所以是10倍。
但是,如果你一次查10w行,並不會比10w次1行快10w倍,因為大數據量查詢本來就慢。延伸一下,以前我們做過一個優化,又來用這個case連續講了4-5年。
這是一個UPDATE table SET col = col + N WHERE key = ?的查詢,大概有5k QPS左右,跑不動。改成了UPDATE table SET col = col + 1 WHERE key IN (?, ?, ?..... )的樣子,資料庫CPU從40%降到1%。
這個改變沒有改變任何索引使用和網路傳輸,是不常見的,解析SQL瓶頸。寫這個例子,是要說,優化要根據具體情況分析,數據量和使用情況都會影響結論。最後廣告一個我總結的MySQL設計經驗:Practices of using MySQL and DBPool至少貼一下表結構和查詢語句吧
推薦閱讀:
※如何用C++介面備份MySQL的二進位數據?
※附近的人怎麼計算出來的?
※Stata 中文字元顯示成問號,該怎麼解決?
※mysql,zk這些強一致性的軟體為什麼要先寫日誌?
※SQL Server 相比 MySQL 有何優勢?
TAG:MySQL |