91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL UDF 在 in ( subquery where ) bug

發布時間:2020-08-07 02:32:07 來源:ITPUB博客 閱讀:102 作者:babyyellow 欄目: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)  

MySQL UDF  在   in ( subquery where ) bug

這個sql  期望的返回值 是   5000. 

但是實際執行的返回值  是  8000. 

把這個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() .... ) 

這種形式的 sql 語句中.     mysql  執行計劃  忽略了   UDF 的存在. 導致結果不準確. 

將 語句改寫為    一個 tab  與一個 subquery  關聯  的寫法.  結果是正確的. 

SELECT COUNT(1)
  FROM ac_dealer_sales a,(SELECT du.user_id FROM ac_dept_user du 
        WHERE du.is_main = 1 AND fun_get_team_id(du.dept_id)= 23) b
WHERE a.user_id = b.user_id 

MySQL UDF  在   in ( subquery where ) bug

這種情況下, 在 4個版本的  mysql 中都可以執行. 

但是  在  5.6.32  5.7.26 執行起來很慢    

5.5.9 跟 8.19 相對較快

UDF  單獨 在  select   部分, 還是 在  where 部分  都沒有問題. 

跟 UDF  本身的實現邏輯沒有關系.     但是在   IN  (  )  子句中   執行計劃 則忽略了 UDF 的過濾條件.  

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

克东县| 桓仁| 遂溪县| 安远县| 瑞金市| 独山县| 平乐县| 昆山市| 镇坪县| 黄石市| 贺兰县| 桐城市| 大理市| 普兰店市| 宜君县| 台北县| 开封市| 惠东县| 迁安市| 临邑县| 吉木乃县| 霍州市| 饶河县| 乌兰察布市| 云梦县| 曲阜市| 松滋市| 阜城县| 留坝县| 宁都县| 乌拉特前旗| 景德镇市| 郑州市| 棋牌| 梁平县| 樟树市| 太保市| 平阴县| 冷水江市| 阿鲁科尔沁旗| 乌什县|