關於MySQL資料庫函式不支援索引的解決方法

2021-08-20 04:55:09 字數 898 閱讀 2400

資料庫的函式f_getworklimit()

create definer=`root`@`%` function `f_getworklimit`(`userid` varchar(20)) returns varchar(50) charset utf8

begin

#routine body goes here...

declare worklimitstr varchar(50);

declare worklimit varchar(50);

select t.worklimit from s_user_section t where  t.userid = userid into worklimitstr;

select f_dept_trim_right_zero(worklimitstr) into worklimit;

set worklimit = concat(worklimit,'%');

return worklimit;

end

select t.* from s_user where t.dept like f_getworklimit('admin');

其中s_user表的dept已經建立索引了,而且sql中採用的右匹配,應該是不會影響索引的使用的,但是查詢條件如果由函式產生的話是不能使用索引的,經過琢磨後,發現可以採用以下方法來解決這個問題:

將sql優化為:select t1.** from s_user t1,(select f_getworklimit('admin') as f_limit) where t1.dept like f_limit.

sql這麼寫的話就可以既用到該函式又可以正常使用索引了。

mysql不支援 MySQL不支援的特性

mysql 1 不支援物化檢視。2 不支援位圖索引。3 不支援並行查詢。4 不支援雜湊關聯,mysql的所有關聯都是巢狀迴圈關聯。不過,可以通過建立乙個雜湊索引來曲線實現。5 不允許對同一表同時進行查詢和更新。報錯 update tb1 as outer tb1 set cnt select cou...

mysql不支援top 支援limit

今天偶爾發現mysql居然不支援top語句,之前用hibernate記得用過top語句。原因是 mysql的確是不支援top語句,之前用的是hql語句,是hibernate幫你翻譯成mysql支援的語句的。通常hibernate的用法 select top 5 id,name,password fr...

Mysql中不支援的Oracle函式

最近在更換資料庫,在改sql的時候有些oracle中的函式在mysql中不支援,記錄一下。1.oracle中的nvl 字段,替代值 此函式的意義為如果欄位是null那麼就用替代值代替這個空欄位對應的值 select nvl age,18 as age from user 這裡面如果某個人的age欄位...