資料庫的函式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欄位...