日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql算法优化原则_Mysql优化原则_小表驱动大表IN和EXISTS的合理利用

發(fā)布時間:2024/9/19 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql算法优化原则_Mysql优化原则_小表驱动大表IN和EXISTS的合理利用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

//假設一個for循環(huán)

for($i = 0; $i < 10000; $i++)

{

for ($j = 0; $i < 50; $j++)

{

}

}

for($i = 0; $i < 50; $i++)

{

for ($j = 0; $i < 10000; $j++)

{

}

}

看以上兩個for循環(huán),總共循環(huán)的次數(shù)是一樣的。但是對于mysql數(shù)據(jù)庫而言,并不是這樣了,我們盡量選擇第②個for循環(huán),也就是小表驅動大表。

數(shù)據(jù)庫最傷神的就是跟程序鏈接釋放,第一個建立了10000次鏈接,第二個建立了50次。假設鏈接了兩次,每次做上百萬次的數(shù)據(jù)集查詢,查完就走,這樣就只做了兩次;相反建立了上百萬次鏈接,申請鏈接釋放反復重復,這樣系統(tǒng)就受不了了。

這時候就誕生了in 和exists的對比。

小表驅動大表:即小的數(shù)據(jù)集驅動大的數(shù)據(jù)集。

這里假設A表代表員工表,B表代表部門表。

假設部門只有三個,銷售、技術部、行政部,言下之意是在這三個部門里的所有員工都查出。

select * from A where id in (select id from B);

這樣寫就等價于:

for select id from B。比如華為有100個部門,但是華為的員工少說有15W-20W,員工總比部門多,這時候就相當于得到了小表(部門表);for select * from A where A.id = B.id,相當于A.id等B表里面的,相當于從部門表獲得對應的id。

當B表的數(shù)據(jù)集必須小于A表的數(shù)據(jù)集時,用in優(yōu)于exists。

反之

select * from A where exists (select 1 from B where B.id = A.id); //這里的select 1并不絕對,可以寫為select 'X'或者'A','B','C'都可以,只要是常量就可以。

這樣寫就等價于:

for select * from A,先從A表做循環(huán)

for select * from B where B.id = A.id,再從B表做循環(huán)。

這樣exists就會變成看看A表是否存在于(select 1 from B where B.id = A.id)里面,這個查詢返回的是TRUE或者FALSE的BOOL值,簡單來說就是要當A表的數(shù)據(jù)集小于B表的數(shù)據(jù)集時,用exists優(yōu)于in。要注意的是:A表與B表的ID字段應該建立索引。

語法:EXISTS

SELECT …FROM table WHERE EXISTS(subquery)。

理解:將主查詢的數(shù)據(jù)放到子查詢中做條件驗證,根據(jù)驗證結果(TRUE或者FALSE)來決定朱查詢的數(shù)據(jù)結果是否得意保留。

相當于從表A和B中取出交集,然后再從A表中取出所在交集的部分數(shù)據(jù),當然后面加WHERE條件還可以進一步篩選。

補充

1:EXISTS(subquery)只返回TRUE或者FALSE,因此子查詢中的SELECT * 也可以是SELECT 1或者SELECT ‘X’,官方說法是實際執(zhí)行時會忽略SELECT清單,因此沒有區(qū)別。

2:EXISTS子查詢的實際執(zhí)行過程可能經(jīng)過了優(yōu)化而不是我們理解上的逐條對比,如果擔憂效率問題,可進行實際校驗。

3:EXISTS子查詢旺旺可以用條件表達式,其他子查詢或者JOIN來替代,何種最優(yōu)需要具體問題具體分析。

如果查詢的兩個表大小相當,那么用in和exists差別不大。

延伸舉例鞏固

如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in:

例如:表A(小表),表B(大表)

select * from A where cc in (select cc from B) ;// 效率低,用到了A表上cc列的索引;

select * from A where exists(select cc from B where cc=A.cc) ;// 效率高,用到了B表上cc列的索引。

相反

select * from B where cc in (select cc from A) ; //效率高,用到了B表上cc列的索引;

select * from B where exists(select cc from A where cc=B.cc) ;//效率低,用到了A表上cc列的索引。

not in 和not exists如果查詢語句使用了not in 那么內外表都進行全表掃描,沒有用到索引;而not extsts 的子查詢依然能用到表上的索引。所以無論那個表大,用not exists都比not in要快。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的mysql算法优化原则_Mysql优化原则_小表驱动大表IN和EXISTS的合理利用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.激情网 | 久久人妻一区二区 | 成人欧美一区二区 | 久久久久亚洲AV成人无在 | 一区二区三区午夜 | 黄色在线观看网址 | 黑人性生活视频 | 少妇人妻偷人精品无码视频 | 朋友人妻少妇精品系列 | 久久久久免费视频 | 视频丨9l丨白浆 | 日本亚洲色大成网站www久久 | 天天做天天爱天天操 | 秋霞在线观看秋 | 青青草成人在线观看 | 色欧美在线| 国产精品一区二区久久 | 三级网站在线看 | 黄色日韩视频 | 天海翼av| 我的公把我弄高潮了视频 | 三级精品视频 | 亚洲av中文无码乱人伦在线视色 | 免费一区二区三区 | 中文字幕在线观看第二页 | 日本免费一区二区三区四区五六区 | www.xxxx欧美| 亚洲精品无码不卡在线播he | 风韵少妇性饥渴推油按摩视频 | 国产一二在线 | 日日夜夜网 | 古代黄色片| 男女无套免费视频网站动漫 | 亚洲福利一区二区三区 | 老女人毛片50一60岁 | 久久中文字幕在线 | 国产地址 | 精品美女一区 | 国产人妻精品一区二区三 | 综合久久精品 | 91中文国产 | 国产成人77亚洲精品www | 中文字幕一区二区三区久久久 | 男女作爱网站 | 成人免费视频国产免费 | 2021天天操 | 久久精品免费在线 | 高清日韩一区二区 | 天天操夜夜夜 | 美女视频黄a视频全免费观看 | 日韩国产精品一区 | 亚洲网站免费 | 免费在线观看网址入口 | 在线观看一区二区三区视频 | bbbbbxxxxx性欧美 | 麻豆国产精品一区 | 久久久久久国产精品 | 精品一区二区三区免费毛片 | 国产精品男女 | 五月综合久久 | 久久频| 亚洲偷 | 成人91av| 国产ts丝袜人妖系列视频 | 奇米视频在线观看 | 久久不卡 | 亚洲欧洲成人 | 日本在线免费观看视频 | 国产情侣在线播放 | 围产精品久久久久久久 | 天天操天天干天天干 | 日本一区二区视频在线观看 | 国产三级漂亮女教师 | 岛国一区二区 | 亚洲av无码一区二区乱孑伦as | 男人的天堂伊人 | 夜夜伊人 | 国产人人爱 | 97人人草 | 色综合久久天天综合网 | 日韩tv | 欧美一级性片 | 日本一级黄| 性的免费视频 | 久久久久久久久久影院 | 日本少妇videos高潮 | 欧美性猛交xxxx黑人交 | 奇米第四色影视 | jizz中国女人 | 伊人精品国产 | av天天射| 日韩视频在线观看免费视频 | 各种含道具高h调教1v1男男 | 自拍偷拍专区 | 国产精品视频免费播放 | 先锋影音av资源在线观看 | 欧美又粗又深又猛又爽啪啪九色 | 婷婷四房综合激情五月 | 国产成人精 |