mysql sql inner join,如何在MySQL中使用INNER JOIN的SQL函数?

I have a function "fnc_FindIssueId" which accepts an object id and return its assigned issue Id.

When I call the function using pure select statements, it works fine:

select fnc_FindIssueId(150083); // returns 1 as issueId for objectId of 150083

select fnc_FindIssueId(150072); // returns 2 as issueId for objectId of 150072

But when I use it within an Inner Join, it goes into a never-ending loop:

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);

What's the reason and how to resolve it?

解决方案

It does not perform never-ending loop.

The reason for that is because the server performs FULL TABLE SCAN which is very slow. This condition si.id = fnc_FindIssueId(so.id) doesn't use an index even if you have define one on si.id and so.id.

The best ways you can do are:

to alter the table smart_objects

another column for the assigned issue Id

define an index on the new column

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值