標籤:

mysql 每次查詢一條數據查10次 和一次查詢10條數據效率有多少差距?

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等工作。

每次查詢,需要:

  1. 建立socket連接。
  2. 解釋SQL語句。
  3. 構建查詢計劃。
  4. 從硬碟上讀取數據。
  5. 返回查詢結果。
  6. 斷開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 |