淺談mysql的子查詢聯(lián)合與in的效率
最近的產(chǎn)品測(cè)試發(fā)現(xiàn)一個(gè)問(wèn)題,當(dāng)并發(fā)數(shù)量小于10時(shí),響應(yīng)時(shí)間可以維持在100毫秒以內(nèi)。但是當(dāng)并發(fā)數(shù)到達(dá)30個(gè)時(shí),響應(yīng)時(shí)間就超過(guò)1秒。這太不能接受了,要求是通過(guò)1秒中并發(fā)100個(gè)。
經(jīng)過(guò)檢測(cè)發(fā)現(xiàn),時(shí)間主要是耗在其中的一個(gè)存儲(chǔ)過(guò)程中。把存儲(chǔ)過(guò)程的語(yǔ)句一條一條的過(guò)一遍也沒(méi)有發(fā)現(xiàn)明顯的不合理。因?yàn)閙ysql本身不能提供毫秒級(jí)別的時(shí)間,google了一個(gè)mysql的能提供毫秒的時(shí)間函數(shù),再做測(cè)試,做了一個(gè)定位。發(fā)現(xiàn)是其中一條語(yǔ)句,語(yǔ)句是這個(gè)樣子:
select .... from A, B where .....and A.id in (select id from C where ...);
in 子查詢語(yǔ)句的結(jié)果很少,就幾條。explain 這條語(yǔ)句,也沒(méi)有什么問(wèn)題。單條測(cè)試也沒(méi)有問(wèn)題。但是當(dāng)并發(fā)數(shù)大時(shí)問(wèn)題就出來(lái)了。
做了個(gè)改變:
select ... from A,B,(select ... from C where ...) S where ....;
再做測(cè)試,性能大為改觀。50個(gè)并發(fā)與10個(gè)并發(fā)幾乎是相同的響應(yīng)速度。
在mysql中,mysql可能都建議改成使用子查詢的聯(lián)合,而不用in。以前沒(méi)有經(jīng)過(guò)實(shí)驗(yàn)。現(xiàn)在終于看見(jiàn)其中的效率了。當(dāng)然,也不能盡相信。還是得根據(jù)自己的應(yīng)用來(lái)。最好是能做一些測(cè)試和實(shí)驗(yàn)。
總結(jié)
以上就是本文關(guān)于淺談mysql的子查詢聯(lián)合與in的效率的全部?jī)?nèi)容,希望對(duì)大家有所幫助。
感興趣的朋友可以參考:
MySQL主庫(kù)binlog(master-log)與從庫(kù)relay-log關(guān)系代碼詳解
mysql數(shù)據(jù)庫(kù)開(kāi)發(fā)規(guī)范【推薦】
有什么問(wèn)題歡迎留言,大家一起交流討論。在此也希望朋友們對(duì)腳本之家網(wǎng)站多多支持!
相關(guān)文章
MySQL查詢時(shí)指定使用索引的實(shí)現(xiàn)
在MySQL中,可以通過(guò)指定查詢使用的索引來(lái)提高查詢性能和優(yōu)化查詢執(zhí)行計(jì)劃,本文就來(lái)介紹一下MySQL查詢時(shí)指定使用索引的實(shí)現(xiàn),感興趣的可以了解一下2023-11-11如何優(yōu)雅、安全的關(guān)閉MySQL進(jìn)程
這篇文章主要介紹了如何優(yōu)雅、安全的關(guān)閉MySQL進(jìn)程,幫助大家更好的理解和學(xué)習(xí)MySQL,感興趣的朋友可以了解下2020-08-08Windows下mysql?8.0.29?winx64安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows下mysql?8.0.29?winx64安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07簡(jiǎn)單實(shí)現(xiàn)MySQL服務(wù)器的優(yōu)化配置方法
我們今天主要向大家描述的是MySQL服務(wù)器的優(yōu)化配置的時(shí)機(jī)操作步驟,以及在MySQL服務(wù)器的優(yōu)化配置的的過(guò)程中值得我們主義的事項(xiàng)的介紹。2011-03-03最新MySql8.27主從復(fù)制及SpringBoot項(xiàng)目中的讀寫(xiě)分離實(shí)戰(zhàn)教程
MySQL主從復(fù)制是一個(gè)異步的復(fù)制過(guò)程,底層是基于MySQL1數(shù)據(jù)庫(kù)自帶的二進(jìn)制日志功能,這篇文章主要介紹了最新MySql8.27主從復(fù)制及SpringBoot項(xiàng)目中的讀寫(xiě)分離實(shí)戰(zhàn)教程,需要的朋友可以參考下2022-08-08刪除mysql數(shù)據(jù)庫(kù)中的重復(fù)數(shù)據(jù)記錄
mysql中select distinct * from text不能顯示不重復(fù)的記錄,而是直接全部顯示2008-06-06MySQL數(shù)據(jù)庫(kù)CPU飆升到100%的詳細(xì)解決方案
在監(jiān)控線上數(shù)據(jù)庫(kù)的運(yùn)行是否安全、正常的過(guò)程中,cpu使用率是一個(gè)重要的指標(biāo),一旦cpu使用率飆升至90%+甚至達(dá)到100%,必然會(huì)對(duì)數(shù)據(jù)庫(kù)的正常工作產(chǎn)生影響,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)CPU飆升到100%的詳細(xì)解決方案,需要的朋友可以參考下2023-05-05Mysql字符串處理函數(shù)詳細(xì)介紹、總結(jié)
這篇文章主要介紹了Mysql字符串處理函數(shù)詳細(xì)介紹、總結(jié),需要的朋友可以參考下2014-04-04MySQL select、insert、update批量操作語(yǔ)句代碼實(shí)例
這篇文章主要介紹了MySQL select、insert、update批量操作語(yǔ)句代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03