我有一个函数“fnc_FindIssueId”,它接受一个对象 ID 并返回其分配的问题 ID。
当我使用纯 select 语句调用该函数时,它工作正常:
select fnc_FindIssueId(150083); // returns 1 as issueId for objectId of 150083
select fnc_FindIssueId(150072); // returns 2 as issueId for objectId of 150072
但是当我在内部连接中使用它时,它会进入一个永无止境的循环:
select so.id, si.id
from smart_objects as so
LEFT OUTER join smart_issues as si
on si.id = fnc_FindIssueId(so.id)
where so.id in (150083, 150072);
是什么原因,如何解决?
最佳答案
它不会执行永无止境 循环。
这是因为服务器执行的 FULL TABLE SCAN
非常慢。此条件 si.id = fnc_FindIssueId(so.id)
不使用索引,即使您在 si.id
和 so.id< 上定义了一个索引
.
最好的方法是:
- 改变表
smart_objects
- 另一列用于
分配的问题 ID
- 在新列上定义索引
关于mysql - 如何在 MySQL 中使用带有 INNER JOIN 的 SQL 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14811363/