最佳化 SQL Server 2008 WHERE 子句中的 CASE 語句
在 SQL Server 2008 中的 CASE
子句中使用 WHERE
語句有時會導致效能問題或不正確的結果。 關鍵在於理解如何正確地將 CASE
語句整合到整體條件邏輯中。
正確用法:
CASE
語句應該總是較大比較的一部分,而不是唯一的比較本身。 正確的結構涉及使用 CASE
語句產生一個值,然後進行比較:
<code class="language-sql">WHERE co.DTEntered = CASE WHEN LEN('blah') = 0 THEN co.DTEntered ELSE '2011-01-01' END</code>
不正確的用法(以及失敗的原因):
以下範例有缺陷,因為 CASE
語句不會產生用於比較的值;它嘗試直接控制整個比較操作,這不是 CASE
在 WHERE
子句中的工作方式:
<code class="language-sql">WHERE CASE LEN('TestPerson') WHEN 0 THEN co.personentered = co.personentered ELSE co.personentered LIKE '%TestPerson' END</code>
更好的方法:使用 OR 語句
當您發現自己需要在 CASE
子句中使用 WHERE
語句時,重構為 OR
語句通常會提供更有效率且可讀的解決方案:
<code class="language-sql">WHERE ( (LEN('TestPerson') = 0 AND co.personentered = co.personentered ) OR (LEN('TestPerson') > 0 AND co.personentered LIKE '%TestPerson') )</code>
效能影響:
CASE
語句和 OR
子句中複雜的 WHERE
條件都會阻礙查詢最佳化和索引使用。 始終爭取盡可能最直接和最有效的 WHERE
子句。 如有必要,請考慮替代查詢結構或索引策略以提高效能。
以上是如何最佳化 SQL Server 2008 的「WHERE」子句中的「CASE」語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!