Oracle
代替靜態列表,對 IN 鍵使用表選擇結果
我對某些查詢使用靜態列表 WHERE 子句,例如
WHERE STypeID IN ('12', '13', '14', '265')
此列表將來會更改;將添加新值。當列表更改時,我不想檢查所有要更改此列表的查詢,而是想從 1 個地方控制此列表;所以我創建了一個有兩列的表;鍵和值,將我的靜態值插入到表中。
Key Value SupportedTypeID 12 SupportedTypeID 13 SupportedTypeID 14 SupportedTypeID 265
我修改了我的where子句
WHERE STypeID IN (SELECT Value FROM LOVs WHERE Key LIKE 'SupportedTypeID')
但這會導致性能問題;查詢結果來得太晚了。
在大多數情況下,用 EXISTS 子句替換 IN 子句可以提高性能。嘗試這個:
WHERE exists (SELECT 1 FROM LOVs WHERE value = STypeID )
WHERE STypeID IN(從 LOV 中選擇值 WHERE Key LIKE ‘SupportedTypeID’)
使用 IN 子句退出,只需加入您的表。在您的 ON 子句中使用 AND 將連接表的行過濾到您感興趣的行。
INNER JOIN LOVs ON LOVs.Value = STypeID AND LOVs.Key = SupportedTypeID
此外,為了進行性能調整,請對 SQL:BatchCompleted 和 RPC:Completed 事件使用 SQL Server Profiler,並查看 Reads、Writes、CPU 和 Duration 列。