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

歡迎訪問 生活随笔!

生活随笔

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

数据库

「mysql优化专题」你们要的多表查询优化来啦!请查收(4)

發布時間:2025/3/21 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 「mysql优化专题」你们要的多表查询优化来啦!请查收(4) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇講的是單表查詢的優化,(本文末有鏈接)。當然,對數據表的多表查詢也是必不可少的。本篇內容主要講解多表聯合查詢的優化

一、多表查詢連接的選擇:


相信這內連接,左連接什么的大家都比較熟悉了,當然還有左外連接什么的,基本用不上我就不貼出來了。這圖只是讓大家回憶一下,各種連接查詢。 然后要告訴大家的是,需要根據查詢的情況,想好使用哪種連接方式效率更高。

?

二、MySQL的JOIN實現原理


在MySQL 中,只有一種Join 算法,就是大名鼎鼎的Nested Loop Join,他沒有其他很多數據庫所提供的Hash Join,也沒有Sort Merge Join。顧名思義,Nested Loop Join 實際上就是通過驅動表的結果集作為循環基礎數據,然后一條一條的通過該結果集中的數據作為過濾條件到下一個表中查詢數據,然后合并結果。如果還有第三個參與Join,則再通過前兩個表的Join 結果集作為循環基礎數據,再一次通過循環查詢條件到第三個表中查詢數據,如此往復。 ——摘自《MySQL 性能調優與架構設計》

                            

補充:mysql對sql語句的容錯問題

即在sql語句不完全符合書寫建議的情況,mysql會允許這種情況,盡可能解釋它:

1)一般cross join后面加上where條件,但是用cross join+on也是被解釋為cross join+where;

2)一般內連接都需要加上on限定條件,如上面場景一;如果不加會被解釋為交叉連接;

3)如果連接表格使用的是逗號,會被解釋為交叉連接;

注:sql標準中還有union join和natural inner join,mysql不支持,而且本身也沒有多大意義,其實就是為了“健壯”。但是其實結果可以用上面的幾種連接方式得到。

?

三、超大型數據盡可能盡力不要寫子查詢,使用連接(JOIN)去替換它:


當然,關于這句話,也不一定就全是這樣。

1)因為在大型的數據處理中,子查詢是非常常見的,特別是在查詢出來的數據需要進一步處理的情況,無論是可讀性還是效率上,這時候的子查都是更優。

2)然而在一些特定的場景,可以直接從數據庫讀取就可以的,比如一個表(A表 a,b,c字段,需要內部數據交集)join自己的效率必然比放一個子查詢在where中快得多。

?

四、使用聯合(UNION)來代替手動創建的臨時表


UNION是會把結果排序的!!!

union查詢:它可以把需要使用臨時表的兩條或更多的select查詢合并的一個查詢中(即把兩次或多次查詢結果合并起來。)。在客戶端的查詢會話結束的時候,臨時表會被自動刪除,從而保證數據庫整齊、高效。使用union來創建查詢的時候,我們只需要用UNION作為關鍵字把多個select語句連接起來就可以了,要注意的是所有select語句中的字段數目要想同。

要求:兩次查詢的列數必須一致(列的類型可以不一樣,但推薦查詢的每一列,相對應的類型要一樣)

可以來自多張表的數據:多次sql語句取出的列名可以不一致,此時以第一個sql語句的列名為準。

如果不同的語句中取出的行,有完全相同(這里表示的是每個列的值都相同),那么union會將相同的行合并,最終只保留一行。也可以這樣理解,union會去掉重復的行。

如果不想去掉重復的行,可以使用union all。

如果子句中有order by,limit,需用括號()包起來。推薦放到所有子句之后,即對最終合并的結果來排序或篩選。

注意:

1、UNION 結果集中的列名總是等于第一個 SELECT 語句中的列名

2、UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同

UNION ALL的作用和語法:

默認地,UNION 操作符選取不同的值。如果允許重復的值,請使用 UNION ALL。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。

?

五、總結


(1)對于要求全面的結果時,我們需要使用連接操作(LEFT JOIN / RIGHT JOIN / FULL JOIN);

(2)應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:

備注、描述、評論之類的可以設置為 NULL,其他最好不要使用NULL。

不要以為 NULL 不需要空間,比如:char(100) 型,在字段建立時,空間就固定了, 不管是否插入值(NULL也包含在內),都是占用 100個字符的空間的,如果是varchar這樣的變長字段, null 不占用空間。

可以在num上設置默認值0,確保表中num列沒有null值,然后這樣查詢:

select id from t where num = 0

(3)in 和 not in 也要慎用,否則會導致全表掃描,如:

對于連續的數值,能用 between 就不要用 in 了:

很多時候用 exists 代替 in 是一個好的選擇:

(4)盡量使用數字型字段,若只含數值信息的字段盡量不要設計為字符型,這會降低查詢和連接的性能,并會增加存儲開銷。這是因為引擎在處理查詢和連接時會逐個比較字符串中每一個字符,而對于數字型而言只需要比較一次就夠了。

(5)盡量使用表變量來代替臨時表。如果表變量包含大量數據,請注意索引非常有限(只有主鍵索引)。

(6)不要以為使用MySQL的一些連接操作對查詢有多么大的改善,其實核心是索引(別打我,下一篇講)

?

【mysql優化專題】相關


「mysql優化專題」這大概是一篇最好的mysql優化入門文章(1)

「mysql優化專題」90%程序員都會忽略的增刪改優化(2)

「mysql優化專題」單表查詢優化的一些小總結(3)

總結

以上是生活随笔為你收集整理的「mysql优化专题」你们要的多表查询优化来啦!请查收(4)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 波多野结衣视频免费观看 | 熟女少妇内射日韩亚洲 | 精品国产乱码久久久久久影片 | 久久中文字幕人妻 | 九九激情视频 | 久久久久成人片免费观看蜜芽 | 国产精品亚洲AV色欲三区不卡 | 调教亲女小嫩苞h文小说 | 久久久av一区二区三区 | 精品视频一二 | 日韩午夜免费视频 | xxx麻豆| 亚洲天堂系列 | 性色tv| 国产激情一区二区三区视频免樱桃 | 国产精品国产a级 | 北条麻妃av在线播放 | 成人在线免费网站 | 成人毛片基地 | 日本网站在线播放 | 亚洲精品国产精品国自产在线 | 国产手机精品视频 | 俺也去婷婷| 国产视频xxxx | 殴美一级片 | 日韩三级中文字幕 | 中文字幕99 | 亚洲偷拍一区 | 美女被草视频在线观看 | 亚洲国产精品18久久久久久 | 精品国产一级 | 精品国产乱码一区二区三区99 | 嫦娥性艳史bd | 欧美人与性动交ccoo | 亚洲啪av永久无码精品放毛片 | 欧美做爰猛烈床戏大尺度 | 国产成人在线电影 | 欧美久久久久久久久久久 | 无套爆插| 色伊人av| 91成人看片| 国产在线观看免费高清 | 欧美在线中文 | 视频丨9l丨白浆 | 国产欧美在线播放 | 亚洲深夜| 97香蕉超级碰碰久久免费软件 | 亚洲熟乱 | 有码中文 | 奇米影视av | 免费特级黄毛片 | 欧美操老女人 | 51吃瓜网今日 | 香蕉视频亚洲一级 | 成都免费高清电影 | 中文字幕免费高清网站 | 欧美大片在线观看 | 在线视频一区二区三区四区 | 国产一区二区三区四区五区在线 | 国产精品成av人在线视午夜片 | 自由 日本语 热 亚洲人 | 打屁屁日本xxxxx变态 | 久久国产香蕉 | 精品无码一区二区三区免费 | 超碰av男人的天堂 | 日韩一区二区高清 | 欧美成人aaa | 亚洲国产综合网 | 欧美成人精品一区二区三区在线看 | 熟妇人妻无码xxx视频 | 13日本xxxxxⅹxxx20 | 香蕉视频三级 | 久久香蕉网站 | 强行侵犯视频在线观看 | 久久99网 | 天堂8中文 | 亚洲激情在线播放 | 国产高清在线视频 | 中文字幕在线看片 | 亚洲天堂av女优 | 国模精品视频 | 777米奇影视第四色 五月丁香久久婷婷 | 精品视频日韩 | 91美女在线视频 | 日韩久久精品视频 | 欧美岛国国产 | 香蕉视频免费在线播放 | 中文字幕无线精品亚洲乱码一区 | 免费看欧美黄色片 | 欧美老熟妇喷水 | 国产精品99久久久久久一二区 | 游戏涩涩免费网站 | 永久在线免费观看 | 美女四肢被绑在床扒衣 | 久久精品电影 | 精品国产一区二区三区四区精华 | 亚洲大片在线观看 | 亚洲天堂久久新 | 免费a级片在线观看 |