簡體   English   中英

在SQL中,是不是查詢越短,運行越快

[英]In SQL, is it true that the shorter the query, the faster it run

我很想知道,因為當我在 MySQL 中運行這兩個查詢時,運行時間越短越快

SELECT FirstName, LastName, City, State 
FROM Person
LEFT JOIN Address ON Person.PersonId = Address.PersonId;

SELECT FirstName, LastName, City, State 
FROM Person
LEFT OUTER JOIN Address ON Person.PersonId = Address.PersonId;

另外,我想問一下Posrgres、MS SQL Server、Oracle和Z497757A9C5B2EC17DED656170B51C788等其他RDBMS中是否發生同樣的事情?

LEFT OUTER JOIN只是LEFT JOIN的同義詞,兩個查詢的執行計划應該相同。 因此,我會將性能上的任何差異歸因於除了在左連接語法中使用OUTER之外的其他因素。 您應該檢查在測試期間您的數據庫上可能正在運行哪些其他任務,以及操作系統上可能正在運行哪些其他進程。

首先,查詢的性能不取決於它的長度。 這有很多“明顯”的原因。 但也許最多的是,數據的大小是由FROM子句中表的大小決定的,這與名稱中的字符數無關。

其次, LEFT JOINLEFT OUTER JOIN是同義詞。 毫無疑問, OUTER在現代計算機上需要更多的新計算周期來解析。 但是差異將以微秒(可能)的幾分之一為單位進行測量,並且是無法測量的。

影響查詢性能的一些因素是:

  • 數據的大小。
  • GROUP BYORDER BY等操作。
  • JOIN s,尤其是沒有索引的情況下。
  • 還有很多很多。

不,您不能將 SQL 語句文本的長度與其執行持續時間相關聯。 相對於計划的行源操作的基數,將語句的執行持續時間與其執行計划相關聯更為准確。

存在證明:

取一個具有單列主鍵 P 的十億行表 T

全表掃描查詢

select * from T

將比唯一索引掃描查詢花費更長的時間執行(隨后是按索引 rowid 訪問表):

select * from T where P = :pval

除了一些奇怪的維護操作(例如,在分區表上重建全局索引),較短的查詢無疑會比較長的查詢花費更長的時間來執行。

暫無
暫無

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

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