mysql樹目錄查詢語句優(yōu)化提高查詢效率
在做mysql樹目錄查詢的時(shí)候遇到了一個(gè)很奇妙的現(xiàn)象
我是先創(chuàng)建了一個(gè)樹目錄查詢的函數(shù)叫 getDeptList()
然后單獨(dú)執(zhí)行查詢函數(shù)的效率很快
但當(dāng)我放到sql語句里加個(gè)判斷執(zhí)行就會(huì)很慢了
累計(jì)查詢出20條數(shù)據(jù)竟然要了0.5秒,那如果查出幾百條不就1秒了 -_-||
后來想了一下可能是每次查詢self_dept表的時(shí)候都會(huì)再執(zhí)行一遍樹目錄的函數(shù)
然后就把sql語句改成了這樣
可以看到,速度大幅度降低直接到了0.06
這里的優(yōu)化思路是先計(jì)算好函數(shù)的結(jié)果,讓函數(shù)只執(zhí)行一遍,而不是根據(jù)self_dept表的判斷進(jìn)行多次計(jì)算
這里順便記錄一下mysql樹目錄排序的方法
sql:
select dept_id from ( select t1.dept_id, if((find_in_set(parent_id, @pids) > 0 or find_in_set(dept_id, @pids) > 0), @pids := concat(@pids, ',', dept_id), 0) as ischild from ( select dept_id,parent_id,dept_name from basis_sys_dept order by parent_id, dept_id ) t1, (select @pids := id) t2 ) t3 where ischild != 0
這個(gè)是可以直接寫在sql語句內(nèi)的,不過有個(gè)缺點(diǎn):完全依靠排序,如果有子級(jí)在父級(jí)上面就會(huì)搜不到
sql:
delimiter // CREATE FUNCTION `getLst`(rootId INT) RETURNS varchar(1000) BEGIN DECLARE sTemp VARCHAR(1000); DECLARE sTempChd VARCHAR(1000); SET sTemp = '$'; SET sTempChd =cast(rootId as CHAR); WHILE sTempChd is not null DO SET sTemp = concat(sTemp,',',sTempChd); SELECT group_concat(dept_id) INTO sTempChd FROM self_dept where FIND_IN_SET(parent_id,sTempChd)>0; END WHILE; RETURN sTemp; END //
這個(gè)是在mysql里創(chuàng)建一個(gè)函數(shù),可以暫無發(fā)現(xiàn)什么bug(如有發(fā)現(xiàn)bug我會(huì)回來修改的)
(在復(fù)制使用的時(shí)候記得修改里面的表名和表字段 我的表:self_dept,id:dept_id,父級(jí)id:parent_id)
到此這篇關(guān)于mysql樹目錄查詢語句優(yōu)化的文章就介紹到這了,更多相關(guān)mysql樹目錄查詢語句優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql數(shù)據(jù)庫無法被其他ip訪問的解決方法
這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫無法被其他ip訪問的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09MySQL中union和order by同時(shí)使用的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狹ySQL中union和order by同時(shí)使用的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12MySQL高并發(fā)生成唯一訂單號(hào)的方法實(shí)現(xiàn)
這篇文章主要介紹了MySQL高并發(fā)生成唯一訂單號(hào)的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02MySQL百萬級(jí)數(shù)據(jù)分頁查詢優(yōu)化方案
在mysql中l(wèi)imit可以實(shí)現(xiàn)快速分頁,但是如果數(shù)據(jù)到了幾百萬時(shí)我們的limit必須優(yōu)化才能有效的合理的實(shí)現(xiàn)分頁了,否則可能卡死你的服務(wù)器哦。2017-11-11mysql unique option prefix myisam_recover instead of myisam-
Using unique option prefix myisam_recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead2016-05-05