加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_宿迁站长网 (https://www.0527zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL UDF 于 in subquery where bug

发布时间:2022-06-27 08:44:53 所属栏目:MySql教程 来源:互联网
导读: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
  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 的过滤条件.  

(编辑:云计算网_宿迁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!