欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

· 進行所有標準WHERE優(yōu)化。

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

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

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

聯(lián)接優(yōu)化器計算表應聯(lián)接的順序。LEFT JOIN和STRAIGHT_JOIN強制的表讀順序可以幫助聯(lián)接優(yōu)化器更快地工作,因為檢查的表交換更少。請注意這說明如果執(zhí)行下面類型的查詢,MySQL進行全掃描b,因為LEFT JOIN強制它在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;

在這種情況下修復時用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可以進行下面的LEFT JOIN優(yōu)化:如果對于產(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;

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

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

這樣可以更快,因為如果可以使查詢更佳,MySQL可以在表t1之前使用表t2。為了強制使用表順序,使用STRAIGHT_JOIN。

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

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

相關文章

  • MySQL數(shù)據(jù)時區(qū)問題以及datetime和timestamp類型存儲的差異

    MySQL數(shù)據(jù)時區(qū)問題以及datetime和timestamp類型存儲的差異

    這篇文章主要介紹了MySQL數(shù)據(jù)時區(qū)問題以及datetime和timestamp類型存儲的差異,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • MySQL數(shù)據(jù)誤刪除的快速解決方法(MySQL閃回工具)

    MySQL數(shù)據(jù)誤刪除的快速解決方法(MySQL閃回工具)

    Binlog2sql是一個Python開發(fā)開源的MySQL Binlog解析工具,能夠將Binlog解析為原始的SQL,也支持將Binlog解析為回滾的SQL,去除主鍵的INSERT SQL,是DBA和運維人員數(shù)據(jù)恢復好幫手,下面小編通過教程給大介紹MySQL數(shù)據(jù)誤刪除的快速解決方法,一起看看吧
    2019-10-10
  • 一步一步教你網(wǎng)站同步鏡像(轉載)

    一步一步教你網(wǎng)站同步鏡像(轉載)

    一步一步教你網(wǎng)站同步鏡像(轉載)...
    2006-10-10
  • 為什么MySQL分頁用limit會越來越慢

    為什么MySQL分頁用limit會越來越慢

    在mysql中l(wèi)imit可以實現(xiàn)快速分頁,但是如果數(shù)據(jù)到了幾百萬時我們的limit必須優(yōu)化才能有效的合理的實現(xiàn)分頁了,否則可能卡死你的服務器
    2021-07-07
  • MySQL日志管理和備份與恢復

    MySQL日志管理和備份與恢復

    這篇文章主要介紹了MySQL如何實現(xiàn)日志的管理,備份與恢復,本文有一定的參考價值,感興趣的小伙伴可以參考閱讀
    2023-04-04
  • 解析mysql中如何獲得數(shù)據(jù)庫的大小

    解析mysql中如何獲得數(shù)據(jù)庫的大小

    本篇文章是對mysql中如何獲得數(shù)據(jù)庫的大小的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • MySql?update語句的詳細用法

    MySql?update語句的詳細用法

    這篇文章主要給大家介紹了關于MySql?update語句的詳細用法,Update 是SQL中用于更新表格中已有記錄的命令,通過使用Update命令,您可以更新表格中的一行或多行記錄,并根據(jù)需要更改它們的值,需要的朋友可以參考下
    2023-11-11
  • MySQL運行在docker容器性能損失解析

    MySQL運行在docker容器性能損失解析

    這篇文章主要為大家介紹了MySQL運行在docker容器中的性能損失解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Mysql存儲過程、觸發(fā)器、事件調(diào)度器使用入門指南

    Mysql存儲過程、觸發(fā)器、事件調(diào)度器使用入門指南

    存儲過程(Stored Procedure)是一種在數(shù)據(jù)庫中存儲復雜程序的數(shù)據(jù)庫對象。為了完成特定功能的SQL語句集,經(jīng)過編譯創(chuàng)建并保存在數(shù)據(jù)庫中,本文給大家介紹Mysql存儲過程、觸發(fā)器、事件調(diào)度器使用入門指南,感興趣的朋友一起看看吧
    2022-01-01
  • MySql 知識點之事務、索引、鎖原理與用法解析

    MySql 知識點之事務、索引、鎖原理與用法解析

    這篇文章主要介紹了MySql 知識點之事務、索引、鎖原理與用法,結合實例形式較為詳細的分析了mysql數(shù)據(jù)庫事務、索引、鎖的概念、原理、使用方法及相關操作注意事項,需要的朋友可以參考下
    2019-09-09

最新評論