最近的產(chǎn)品測試發(fā)現(xiàn)一個問題,當并發(fā)數(shù)量小于10時,響應(yīng)時間可以維持在100毫秒以內(nèi)。但是當并發(fā)數(shù)到達30個時,響應(yīng)時間就超過1秒。這太不能接受了,要求是通過1秒中并發(fā)100個。
經(jīng)過檢測發(fā)現(xiàn),時間主要是耗在其中的一個存儲過程中。把存儲過程的語句一條一條的過一遍也沒有發(fā)現(xiàn)明顯的不合理。因為mysql本身不能提供毫秒級別的時間,google了一個mysql的能提供毫秒的時間函數(shù),再做測試,做了一個定位。發(fā)現(xiàn)是其中一條語句,語句是這個樣子:
select .... from A, B where .....and A.id in (select id from C where ...);
in 子查詢語句的結(jié)果很少,就幾條。explain 這條語句,也沒有什么問題。單條測試也沒有問題。但是當并發(fā)數(shù)大時問題就出來了。
做了個改變:
select ... from A,B,(select ... from C where ...) S where ....;
再做測試,性能大為改觀。50個并發(fā)與10個并發(fā)幾乎是相同的響應(yīng)速度。
在mysql中,mysql可能都建議改成使用子查詢的聯(lián)合,而不用in。以前沒有經(jīng)過實驗?,F(xiàn)在終于看見其中的效率了。當然,也不能盡相信。還是得根據(jù)自己的應(yīng)用來。最好是能做一些測試和實驗。
總結(jié)
以上就是本文關(guān)于淺談mysql的子查詢聯(lián)合與in的效率的全部內(nèi)容,希望對大家有所幫助。
感興趣的朋友可以參考:
幾個比較重要的MySQL變量
MySQL主庫binlog(master-log)與從庫relay-log關(guān)系代碼詳解
mysql數(shù)據(jù)庫開發(fā)規(guī)范【推薦】
有什么問題歡迎留言,大家一起交流討論。在此也希望朋友們對腳本之家網(wǎng)站多多支持!
您可能感興趣的文章:- 詳解Mysql多表聯(lián)合查詢效率分析及優(yōu)化
- mysql連接查詢、聯(lián)合查詢、子查詢原理與用法實例詳解
- MySQL全文索引、聯(lián)合索引、like查詢、json查詢速度哪個快
- mysql多表聯(lián)合查詢操作實例分析
- Mysql兩表聯(lián)合查詢的四種情況總結(jié)
- 對MySQL幾種聯(lián)合查詢的通俗解釋
- Mysql聯(lián)合查詢UNION和UNION ALL的使用介紹
- Mysql聯(lián)合查詢UNION和Order by同時使用報錯問題的解決辦法
- mysql多表聯(lián)合查詢返回一張表的內(nèi)容實現(xiàn)代碼
- 詳解MySQL 聯(lián)合查詢優(yōu)化機制