mysql - 如何在 MySQL 中使用带有 INNER JOIN 的 SQL 函数?

标签 mysql sql function join inner-join

我有一个函数“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.idso.id< 上定义了一个索引.

最好的方法是:

  • 改变表smart_objects
  • 另一列用于分配的问题 ID
  • 在新列上定义索引

关于mysql - 如何在 MySQL 中使用带有 INNER JOIN 的 SQL 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14811363/

相关文章:

java - 如何解决第 1 行的错误 'Data truncation: Out of range value for column ' id_brand'?

mysql - 如何在不使用子查询的情况下在mysql中找到第二和第三高的工资

mysql - 使用 SQL (Grails) 在输出映射中的“SUM()”

sql - 如何获取 PostgreSQL 中每个用户的最后编辑帖子?

Javascript 对象与 setInterval

Java 8 如何在没有 Lambda 的情况下编写函数?

jquery - 使用 jQuery 和 AJAX 返回 mySQL 错误

sql - 选择日期+3天,不包括周末和节假日

mysql - 表名指定两次,既作为更新目标又作为单独的数据源

python - python如何加载全局变量?