3 回答

TA貢獻2012條經驗 獲得超12個贊
不,順序無關緊要(或至少:不重要)。
任何體面的查詢優化器都會查看該子句的所有部分,WHERE
并找出滿足該查詢的最有效方法。
我知道SQL Server查詢優化器將選擇合適的索引-無論您有兩個條件都處于哪個順序。我假設其他RDBMS也會有類似的策略。
重要的是您是否有合適的索引!
對于SQL Server,如果您具有以下條件,它將可能使用索引:
索引
(LastName, FirstName)
索引
(FirstName, LastName)
(LastName)
或或(FirstName)
(或兩者)的索引
另一方面-對于SQL Server而言-如果您習慣于從表中SELECT *
獲取所有列,并且表很小,則查詢優化器很有可能只會進行表(或聚集索引)掃描而不是使用一個索引(因為查找整個數據頁面以獲取所有其他列的代價非??欤?。

TA貢獻1884條經驗 獲得超4個贊
WHERE子句的順序不應在符合SQL標準的數據庫中有所作為。在大多數數據庫中,不能保證評估順序。
不要以為SQL關心順序。以下在SQL Server中生成錯誤:
select *
from INFORMATION_SCHEMA.TABLES
where ISNUMERIC(table_name) = 1 and CAST(table_name as int) <> 0
如果首先執行此子句的第一部分,則僅將數字表名強制轉換為整數。但是,它失敗了,提供了一個清楚的示例,表明SQL Server(與其他數據庫一樣)不關心WHERE語句中子句的順序。

TA貢獻1780條經驗 獲得超1個贊
ANSI SQL草稿2003 5WD-01-Framework-2003-09.pdf
6.3.3.3規則評估順序
...
如果優先級不是由格式或括號確定的,則通常從左到右執行表達式的有效評估。但是,取決于表達式是否實際上是從左到右求值,這取決于實現,特別是在操作數或運算符可能導致條件升高或是否可以在不完全評估表達式所有部分的情況下確定表達式的結果時。
添加回答
舉報