簡體   English   中英

SQL子查詢和連接查詢

[英]SQL sub-queries and Join Queries

我正在開發一個包含大量SQL請求的項目,我想知道:

什么在速度方面提供了更好的表現:

  • 加入查詢
  • 子查詢

例如

SELECT artistName FROM artist
JOIN group 
On group.location = artist.location
AND group.available = 'true'

SELECT artistName FROM artist,
(SELECT group.available = true) AS groupAvailable
WHERE groupAvailable.location = artist.location

什么可以為我提供更好的大查詢性能。

我不太確定你的第二個查詢是否是有效的SQL,但幸運的是你的問題答案與此無關。

性能取決於很多很多因素,所以對於這類問題你能得到的最好答案是“它取決於”。

首先,確保您需要優化查詢。 如果當前運行時是可接受的,請不要觸摸任何東西(不要修復未破壞的東西)。

如果您確實需要優化查詢,請親自嘗試。 根據DBMS,服務器負載,數據分布以及可能的其他變量,您的性能可能會發生很大變化,因此您可以知道的唯一方法是測試您的實際情況並確定結果是否符合您的要求。

由於您沒有提到您需要知道任何特定查詢的答案,我假設您一般性地詢問join查詢是否比subqueries查詢更快。 答案是在大多數情況下, join查詢比subqueries查詢更快。 我也不知道答案,所以在我看到你的問題之后我研究了,並引用了我發現的東西 -

在JOIN中,RDBMS可以創建一個更適合您的查詢的執行計划,並且可以預測應該加載哪些數據以進行處理並節省時間,這與子查詢不同,子查詢將運行所有查詢並加載所有數據以進行處理。

實際上你並不是第一個提出這個問題的人。 如果我找到了你,那么另一個類似的問題也在這里

正如其他幾個人所提到的,它確實只是依賴。 運行查詢的數據庫並不總是完全遵循您編寫的代碼。 它通常會與您期望的完全不同。 實際上,您編寫的兩個查詢都可能以完全相同的方式運行。 嘗試啟用統計信息並運行兩個查詢以進行檢查(假設您在MS SQL Server上)

SET STATISTICS IO ON
SET STATISTICS TIME ON

當您使用這兩個設置運行查詢時,您可以看到有多少邏輯讀取和多少CPU時間。 它在識別性能瓶頸方面非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM