我正在构建一个整理大量数据的报告,报告的数据已成形为一个视图,该视图在大约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