1. 程式人生 > 資料庫 >淺談mysql的子查詢聯合與in的效率

淺談mysql的子查詢聯合與in的效率

最近的產品測試發現一個問題,當併發數量小於10時,響應時間可以維持在100毫秒以內。但是當併發數到達30個時,響應時間就超過1秒。這太不能接受了,要求是通過1秒中併發100個。

經過檢測發現,時間主要是耗在其中的一個儲存過程中。把儲存過程的語句一條一條的過一遍也沒有發現明顯的不合理。因為mysql本身不能提供毫秒級別的時間,google了一個mysql的能提供毫秒的時間函式,再做測試,做了一個定位。發現是其中一條語句,語句是這個樣子:

 select .... from A,B where .....and A.id in (select id from C where ...);

in 子查詢語句的結果很少,就幾條。explain 這條語句,也沒有什麼問題。單條測試也沒有問題。但是當併發數大時問題就出來了。

做了個改變:

 select ... from A,B,(select ... from C where ...) S where ....;

再做測試,效能大為改觀。50個併發與10個併發幾乎是相同的響應速度。

在mysql中,mysql可能都建議改成使用子查詢的聯合,而不用in。以前沒有經過實驗。現在終於看見其中的效率了。當然,也不能盡相信。還是得根據自己的應用來。最好是能做一些測試和實驗。

總結

以上就是本文關於淺談mysql的子查詢聯合與in的效率的全部內容,希望對大家有所幫助。

感興趣的朋友可以參考:

幾個比較重要的MySQL變數

MySQL主庫binlog(master-log)與從庫relay-log關係程式碼詳解

mysql資料庫開發規範【推薦】

有什麼問題歡迎留言,大家一起交流討論。在此也希望朋友們對我們網站多多支援!