這篇文章為大家帶來了關於mysql的相關知識,其中主要介紹了左連接、右連接、內連接與hash連接的工作原理,並分析子查詢與join的不同,根據所學提供一些工作中需要掌握的實戰技巧,下面一起來看一下,希望對大家有幫助。
推薦學習:mysql影片教學
在多個表上建立索,並且多個表JOIN和子查詢語句相對比較困難。許多開發人員不自覺地認為JOIN 會降低 SQL 的效能效率,因此他們將多表 SQL 拆分為單表查詢,認為這會影響SQL執行的效率,原因是開發人員不了解JOIN實作過程。
聯接之間的表關聯使用索引進行匹配,假設表R和表S是連接的。
表R被稱為驅動表,表R中透過WHERE條件過濾的資料將在表S對應的索引上逐一查詢。如果驅動表R的資料量不大,則上述演算法非常有效。
以下三種JOIN 類型,驅動表各是哪張表:
SELECT * FROM R LEFT JOIN S ON R.x = S.x WEHRE ... SELECT * FROM R RIGHT JOIN S ON R.x = S.x WEHRE ... SELECT * FROM R INNER JOIN S ON R.x = S.x WEHRE ...
SELECT * FROM R INNER JOIN S ON R.x = S.x WHERE R.y = ? AND S.z = ?
SELECT * FROM R LEFT JOIN S ON R.x = S.x WHERE R.y = ? AND S.z = ?
SELECT * FROM R RIGHT JOIN S ON R.x = S.x WHERE R.y = ? AND S.z = ?
線上分析處理,用於資料分析,它使我們能夠同時分析來自多個資料庫系統的資訊),哈希連接是必不可少的功能。 MySQL 8.0開始支援 Hash Join演算法,加強了對 OLAP 業務的支援。
因此,如果您的查詢資料量不太大,且查詢的回應時間要求在分鐘級別,則可以使用單一實例MySQL 8.0來完成大資料的查詢。在MySQL 8.0之前,MySQL沒有完全最佳化子查詢。因此,您將在子查詢的執行計劃中看到DEPENDENT SUBQUERY的提示,這表示它是一個從屬子查詢,子查詢需要依賴外部表的關聯。 DEPENDENT SUBQUERY的執行速度可能非常慢,而且大多數時候您需要手動將其轉換為兩個表之間的連接。
所以這裡部落客提示大家,如果你的目前的MySQL 8.0版本可以寫子查詢,因為子查詢的最佳化相當完整;
對於MySQL 8.0 之前版本的MySQL,需要查看所有子查詢的SQL 執行計劃。對於 DEPENDENT SUBQUERY 的提示,要進行最佳化,否則將對業務產生重大效能影響;DEPENDENT SUBQUERY的最佳化通常會重寫為用於表格連接的衍生表。
推薦學習:mysql影片教學
#以上是MySQL原理總結之左連接、右連接、內連接與Hash連接的詳細內容。更多資訊請關注PHP中文網其他相關文章!