MySQL UDF 于 in subquery where bug
发布时间:2022-06-25 10:16 所属栏目:115 来源:互联网
导读:SELECT 45, COUNT(0) FROM ac_dealer_sales ds WHERE ds.user_id in (SELECT du.user_id FROM ac_dept_user du WHERE du.is_main = 1 AND fun_get_team_id(du.dept_id)= 23) 把这个sql 拆为 一个 select count(*) from tab where id in ( selectd id from ta
SELECT 45, COUNT(0) FROM ac_dealer_sales ds WHERE ds.user_id in (SELECT du.user_id FROM ac_dept_user du WHERE du.is_main = 1 AND fun_get_team_id(du.dept_id)= 23) 把这个sql 拆为 一个 select count(*) from tab where id in ( selectd id from tab). tab = ( create table tab as ( subquery) ) sub query 中 包含了 一个UDF fun_get_team_id( int) return int 结果与期望结果是一直的. 测试了4个版本。 5.5.9 5.6.32 5.7.26 8.0.19 发现这样的语句只有在5.5.9 上是正确的 如果 UDF 在 selectd * from tab where id in ( select * from tab where UDF() .... ) 这种情况下, 在 4个版本的 mysql 中都可以执行. 但是 在 5.6.32 5.7.26 执行起来很慢 5.5.9 跟 8.19 相对较快 UDF 单独 在 select 部分, 还是 在 where 部分 都没有问题. 跟 UDF 本身的实现逻辑没有关系. 但是在 IN ( ) 子句中 执行计划 则忽略了 UDF 的过滤条件. (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读