翻譯|使用教程|編輯:秦林|2022-11-24 09:38:33.063|閱讀 285 次
概述:如何在Navicat 16版本實現子查詢和聯接的選擇,小編通過本文給大家具體介紹,歡迎下載最新版試用體驗。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
如果你需要在查詢添加許多聯接,數據庫服務器就必須做更多的工作,這可能會導致數據檢索時間變慢。本文將介紹幾個你可以執行的快速測試,比較使用聯接的查詢和包含子查詢的查詢,讓你可以選擇最佳性能的查詢。
大多數時候,你可以使用連接或子查詢來編寫查詢。為了說明這一點,以下有一個從 MySQL Sakila 示例數據庫中選擇地區及其相關城市和地址的查詢。第一個 SELECT 語句使用聯接,而第二個 SELECT 語句使用子查詢獲取完全相同的數據:
SELECT co.Country, COUNT(DISTINCT ci.city_id) AS city_cnt, COUNT(a.city_id) AS address_cnt FROM country co INNER JOIN city ci ON co.country_id = ci.country_id INNER JOIN address a ON ci.city_id = a.city_id GROUP BY co.country_id; SELECT Co.Country, (Select COUNT(1) FROM City Ci WHERE Ci.country_id=co.country_id) AS city_cnt, (Select COUNT(1) FROM Address A INNER JOIN city c on a.city_id=c.city_id WHERE C.country_id=co.country_id) AS address_cnt From Country Co;
在 Navicat中,我們可以很容易地比較查詢結果,因為它可以同時運行多個查詢。每個結果集都顯示在 SQL 編輯器下的一個選項卡中。在下圖中,結果 2 選項卡的內容顯示在結果 1 旁邊以便快速比較:
驗證了這兩個語句是等效的之后,我們現在可以比較它們的執行時間。
為此,我們可以選擇其中一個語句,然后點擊“運行”按鈕。只要在編輯器中選擇了文本,該按鈕的標簽就會変為“運行已選擇的”。在畫面底部可以看到運行時間是 0.020秒:
對第二條語句執行相同操作,得出運行時間為 0.021秒 。時間差異很小,但會隨著數據量的增加而增長:
一個查詢的執行計劃可以揭示很多關于它執行速度的信息。在 Navicat 中,我們可以點擊“解釋”按鈕來查看執行計劃。 雖然需要一些練習才能熟練地解譯解釋的結果,但這樣做可以在嘗試確定查詢的效率時帶來好處。
解釋 1 選項卡顯示第一個(聯接)查詢的執行計劃。我們可以一眼看出它涉及 3 個 SIMPLE 選擇:
同時,解釋 2 選項卡列出了一個 PRIMARY 選擇,然后是三個 DEPENDENT SUBQUERY。即使不深入探究,我們也可以看到執行第二個(子查詢)語句需要一個額外的步驟:
雖然本文似乎證實了聯接與子查詢:哪個更快?文章得出的結論,但比較連接和子查詢方法頗有價值的。在任何情況下,子查詢仍然有優于連接的時候,例如當你必須即時計算聚合值并在外部查詢中使用它進行比較時。
Navicat Premium是一個可連接多種數據庫的管理工具,它可以讓你以單一程序同時連接到MySQL、Oracle及PostgreSQL等數據庫,讓管理不同類型的數據庫更加的方便。慧都2022年終狂歡活動火熱進行中,全場產品超低價來襲,Navicat系列產品最高直降600元,了解更多活動詳情,請咨詢。
數據庫管理工具交流群:7645665608 歡迎進群交流討論
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn