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