[英]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 JOIN
和LEFT OUTER JOIN
是同義詞。 毫無疑問, OUTER
在現代計算機上需要更多的新計算周期來解析。 但是差異將以微秒(可能)的幾分之一為單位進行測量,並且是無法測量的。
影響查詢性能的一些因素是:
GROUP BY
和ORDER BY
等操作。JOIN
s,尤其是沒有索引的情況下。不,您不能將 SQL 語句文本的長度與其執行持續時間相關聯。 相對於計划的行源操作的基數,將語句的執行持續時間與其執行計划相關聯更為准確。
存在證明:
取一個具有單列主鍵 P 的十億行表 T
全表掃描查詢
select * from T
將比唯一索引掃描查詢花費更長的時間執行(隨后是按索引 rowid 訪問表):
select * from T where P = :pval
除了一些奇怪的維護操作(例如,在分區表上重建全局索引),較短的查詢無疑會比較長的查詢花費更長的時間來執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.