淺談mysql的子查詢聯合與in的效率
最近的產品測試發(fā)現一個問題,當并發(fā)數量小于10時,響應時間可以維持在100毫秒以內。但是當并發(fā)數到達30個時,響應時間就超過1秒。這太不能接受了,要求是通過1秒中并發(fā)100個。
經過檢測發(fā)現,時間主要是耗在其中的一個存儲過程中。把存儲過程的語句一條一條的過一遍也沒有發(fā)現明顯的不合理。因為mysql本身不能提供毫秒級別的時間,google了一個mysql的能提供毫秒的時間函數,再做測試,做了一個定位。發(fā)現是其中一條語句,語句是這個樣子:
select .... from A, B where .....and A.id in (select id from C where ...);
in 子查詢語句的結果很少,就幾條。explain 這條語句,也沒有什么問題。單條測試也沒有問題。但是當并發(fā)數大時問題就出來了。
做了個改變:
select ... from A,B,(select ... from C where ...) S where ....;
再做測試,性能大為改觀。50個并發(fā)與10個并發(fā)幾乎是相同的響應速度。
在mysql中,mysql可能都建議改成使用子查詢的聯合,而不用in。以前沒有經過實驗?,F在終于看見其中的效率了。當然,也不能盡相信。還是得根據自己的應用來。最好是能做一些測試和實驗。
總結
以上就是本文關于淺談mysql的子查詢聯合與in的效率的全部內容,希望對大家有所幫助。
感興趣的朋友可以參考:
MySQL主庫binlog(master-log)與從庫relay-log關系代碼詳解
有什么問題歡迎留言,大家一起交流討論。在此也希望朋友們對腳本之家網站多多支持!
相關文章
Windows下mysql?8.0.29?winx64安裝配置方法圖文教程
這篇文章主要為大家詳細介紹了Windows下mysql?8.0.29?winx64安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07最新MySql8.27主從復制及SpringBoot項目中的讀寫分離實戰(zhàn)教程
MySQL主從復制是一個異步的復制過程,底層是基于MySQL1數據庫自帶的二進制日志功能,這篇文章主要介紹了最新MySql8.27主從復制及SpringBoot項目中的讀寫分離實戰(zhàn)教程,需要的朋友可以參考下2022-08-08MySQL select、insert、update批量操作語句代碼實例
這篇文章主要介紹了MySQL select、insert、update批量操作語句代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03