最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中對(duì)表連接查詢的簡單優(yōu)化教程

 更新時(shí)間:2015年12月09日 10:48:41   作者:KimiChen  
這篇文章主要介紹了MySQL中對(duì)表連接查詢的簡單優(yōu)化教程,表連接查詢是MySQL最常用到的基本操作之一,因而其的優(yōu)化也非常值得注意,需要的朋友可以參考下

在MySQL中,A LEFT JOIN B join_condition執(zhí)行過程如下:

· 根據(jù)表A和A依賴的所有表設(shè)置表B。

· 根據(jù)LEFT JOIN條件中使用的所有表(除了B)設(shè)置表A。

· LEFT JOIN條件用于確定如何從表B搜索行。(換句話說,不使用WHERE子句中的任何條件)。

· 可以對(duì)所有標(biāo)準(zhǔn)聯(lián)接進(jìn)行優(yōu)化,只是只有從它所依賴的所有表讀取的表例外。如果出現(xiàn)循環(huán)依賴關(guān)系,MySQL提示出現(xiàn)一個(gè)錯(cuò)誤。

· 進(jìn)行所有標(biāo)準(zhǔn)WHERE優(yōu)化。

· 如果A中有一行匹配WHERE子句,但B中沒有一行匹配ON條件,則生成另一個(gè)B行,其中所有列設(shè)置為NULL。

· 如果使用LEFT JOIN找出在某些表中不存在的行,并且進(jìn)行了下面的測試:WHERE部分的col_name IS NULL,其中col_name是一個(gè)聲明為 NOT NULL的列,MySQL找到匹配LEFT JOIN條件的一個(gè)行后停止(為具體的關(guān)鍵字組合)搜索其它行。

RIGHT JOIN的執(zhí)行類似LEFT JOIN,只是表的角色反過來。

聯(lián)接優(yōu)化器計(jì)算表應(yīng)聯(lián)接的順序。LEFT JOIN和STRAIGHT_JOIN強(qiáng)制的表讀順序可以幫助聯(lián)接優(yōu)化器更快地工作,因?yàn)闄z查的表交換更少。請(qǐng)注意這說明如果執(zhí)行下面類型的查詢,MySQL進(jìn)行全掃描b,因?yàn)長EFT JOIN強(qiáng)制它在d之前讀?。?/p>

SELECT *
FROM a,b LEFT JOIN c ON (c.key=a.key) LEFT JOIN d ON (d.key=a.key)
WHERE b.key=d.key;

在這種情況下修復(fù)時(shí)用a的相反順序,b列于FROM子句中:

SELECT *
FROM b,a LEFT JOIN c ON (c.key=a.key) LEFT JOIN d ON (d.key=a.key)
WHERE b.key=d.key;

MySQL可以進(jìn)行下面的LEFT JOIN優(yōu)化:如果對(duì)于產(chǎn)生的NULL行,WHERE條件總為假,LEFT JOIN變?yōu)槠胀?lián)接。

例如,在下面的查詢中如果t2.column1為NULL,WHERE 子句將為false:

SELECT * FROM t1 LEFT JOIN t2 ON (column1) WHERE t2.column2=5;

因此,可以安全地將查詢轉(zhuǎn)換為普通聯(lián)接:

SELECT * FROM t1, t2 WHERE t2.column2=5 AND t1.column1=t2.column1;

這樣可以更快,因?yàn)槿绻梢允共樵兏?,MySQL可以在表t1之前使用表t2。為了強(qiáng)制使用表順序,使用STRAIGHT_JOIN。

以及先過濾條件然后再根據(jù)表連接 同時(shí)在表中建立相關(guān)查詢字段的索引這樣在大數(shù)據(jù)多表聯(lián)合查詢的情況下速度相當(dāng)快,可以來看一下下面這個(gè)例子中的寫法:

SELECT M.*,SS.SensorCode,SS.SensorStatus,SS.ManufacturerId,SS.Electricity,
SS.Voltage,SS.MinElectricity,SS.MinVoltage,SS.Temperature,SS.StatusUpdteDate,SS.UpdateStatus ,tp.PricingStrategyid,tps.FreeDuration,bat.BerthTypeId 
FROM
(SELECT T.* , BS.ParkStatus,BS.ChangeTime ,CA.CantonName, SE.SectionName
 FROM
(SELECT A.* ,B.BerthId,B.BerthCode,B.BerthAddress,B.BerthStatus,B.LineDirection,B.CantonId,B.SectionId 
FROM 
(SELECT AR.AreaId,AR.AreaCode,AR.AreaName FROM  SYS_Area AS AR WHERE 1=1  AND AR.AreaCode='110' ) A 
LEFT JOIN SYS_Berth AS B ON B.AreaId=A.AreaId ) T
JOIN SYS_BerthStatus AS BS ON T.BerthCode=BS.BerthCode 
JOIN SYS_Canton AS CA ON T.CantonId=CA.CantonId 
JOIN SYS_Section AS SE ON T.SectionId=SE.SectionId )M

LEFT JOIN SYS_Sensor SS ON M.BerthCode=SS.BerthCode 
LEFT JOIN TRA_PricingBerth AS tp ON tp.BerthCode=M.BerthCode 
 
LEFT JOIN TRA_PricingStrategy AS tps ON tps.PricingStrategyId=tp.PricingStrategyId 
LEFT JOIN SYS_BerthAndType AS bat ON bat.BerthCode=M.BerthCode 
ORDER BY BerthCode ASC

相關(guān)文章

  • MySql約束超詳細(xì)介紹

    MySql約束超詳細(xì)介紹

    MySQL唯一約束(Unique?Key)是指所有記錄中字段的值不能重復(fù)出現(xiàn)。例如,為?id?字段加上唯一性約束后,每條記錄的?id?值都是唯一的,不能出現(xiàn)重復(fù)的情況
    2022-09-09
  • mysql數(shù)據(jù)庫添加用戶及分配權(quán)限具體實(shí)現(xiàn)

    mysql數(shù)據(jù)庫添加用戶及分配權(quán)限具體實(shí)現(xiàn)

    這篇文章主要介紹了mysql數(shù)據(jù)庫添加用戶及分配權(quán)限的方法,需要的朋友可以參考下
    2014-02-02
  • Mybatis集成MySQL使用游標(biāo)查詢處理大批量數(shù)據(jù)方式

    Mybatis集成MySQL使用游標(biāo)查詢處理大批量數(shù)據(jù)方式

    這篇文章主要介紹了Mybatis集成MySQL使用游標(biāo)查詢處理大批量數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 關(guān)于MySQL主從復(fù)制的幾種復(fù)制方式總結(jié)

    關(guān)于MySQL主從復(fù)制的幾種復(fù)制方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于MySQL主從復(fù)制的幾種復(fù)制方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • mysql 5.0.67最新版替代MySQL 5.0.51b版本官方下載

    mysql 5.0.67最新版替代MySQL 5.0.51b版本官方下載

    發(fā)布說明MySQL服務(wù)器5.0.67 ( 2008年8月4日) 這是一個(gè)bugfix釋放現(xiàn)有生產(chǎn)釋放的家庭。它取代MySQL的5.0.51b 。
    2008-08-08
  • 淺談mysql8.0新特性的坑和解決辦法(小結(jié))

    淺談mysql8.0新特性的坑和解決辦法(小結(jié))

    這篇文章主要介紹了淺談mysql8.0新特性的坑和解決辦法(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • MySQL?字符串日期格式轉(zhuǎn)換的幾種方法

    MySQL?字符串日期格式轉(zhuǎn)換的幾種方法

    MySQL經(jīng)常需要將字符串類型的日期轉(zhuǎn)換成日期或時(shí)間類型,本文主要介紹了MySQL?字符串日期格式轉(zhuǎn)換的幾種方法,包括使用STR_TO_DATE()和DATE_FORMAT()函數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • mysql常見的錯(cuò)誤提示問題處理小結(jié)

    mysql常見的錯(cuò)誤提示問題處理小結(jié)

    本文總結(jié)了在使用mysql過程中經(jīng)常遇到的3種錯(cuò)誤提示(error1067,error1061,error1045)的問題的處理方法,都是本人在實(shí)際應(yīng)用中處理檢驗(yàn)過的,希望對(duì)大家有所幫助
    2014-08-08
  • MySQL8.0修改密碼的正確姿勢分享

    MySQL8.0修改密碼的正確姿勢分享

    如果當(dāng)初設(shè)置了一個(gè)很復(fù)雜的數(shù)據(jù)庫密碼,是很可能忘記的,下面這篇文章主要給大家介紹了關(guān)于MySQL8.0修改密碼的正確姿勢,需要的朋友可以參考下
    2022-03-03
  • MySQL 給用戶添加 ALTER VIEW 的權(quán)限的步驟

    MySQL 給用戶添加 ALTER VIEW 的權(quán)限的步驟

    在 MySQL 中,用戶權(quán)限的管理是非常重要的,以確保數(shù)據(jù)庫安全性和數(shù)據(jù)完整性,這篇文章主要介紹了MySQL 給用戶添加 ALTER VIEW 的權(quán)限,需要的朋友可以參考下
    2024-05-05

最新評(píng)論

安康市| 广灵县| 临洮县| 化州市| 木兰县| 新兴县| 阜新| 章丘市| 新余市| 河源市| 迁安市| 德清县| 赫章县| 鲜城| 绍兴县| 河北省| 馆陶县| 朝阳县| 潮安县| 封开县| 固阳县| 晋中市| 竹北市| 浪卡子县| 肃宁县| 罗城| 姚安县| 扶绥县| 汨罗市| 静安区| 馆陶县| 通许县| 林西县| 徐闻县| 和龙市| 盖州市| 密云县| 长海县| 通渭县| 北票市| 霞浦县|