我正在構建一個整理大量數據的報告,報告的數據已成形爲一個視圖,該視圖在大約2到9秒內運行(這是可以接受的)。我還有一個函數返回一組需要過濾視圖的ID:SQL查詢速度
select *
from vw_report
where employee_id in (select id from dbo.fnc_security(@personRanAsID))
安全功能本身運行時間不到一秒鐘。但是,當我將上述兩者結合使用時,查詢需要15分鐘。
視圖和安全功能都做了相當多的工作,所以最初我認爲它可能是鎖定,我已經嘗試了沒有鎖定安全功能,但它沒有任何區別。
關於我可能會出錯的任何提示或技巧?
這可能是值得指出的是,當我複製函數的結果到在語句的一部分:
select *
from vw_report
where employee_id in (123, 456, 789)
的速度增加回2至9秒。
這很難回答,如果我們不知道你正在使用(Oracle,MySQL等,SQL服務器和PostgreSQL,SQLite的...)和什麼RDBMS的版本是什麼RDBMS。它們的SQL實現有所不同,有些功能可以用來提高查詢效率。 – Benoit