SQL處理多級(jí)分類(lèi),查詢(xún)結(jié)果呈樹(shù)形結(jié)構(gòu)
更新時(shí)間:2012年08月03日 17:23:37 作者:
對(duì)于多級(jí)分類(lèi)常規(guī)的處理方法,很多程序員可能是用程序先讀取一級(jí)分類(lèi)記錄,然后通過(guò)一級(jí)分類(lèi)循環(huán)讀取下面的子分類(lèi)
這樣處理的弊端是:如果數(shù)據(jù)量大,子分類(lèi)很多,達(dá)到4級(jí)以上,這方法處理極端占用數(shù)據(jù)庫(kù)連接池
對(duì)性能影響很大。
如果用SQL下面的CTE遞歸處理的話(huà),一次性就能把結(jié)果給查詢(xún)出來(lái),而且性能很不錯(cuò)
比用程序處理(數(shù)據(jù)量很大的情況),臨時(shí)表性能更好,更方便
with area as(
select *,id px,cast(id as nvarchar(4000)) px2 from region where parentid=0
union all
select a.*,b.px,b.px2+ltrim(a.region_id) from region a join area b on a.parentid=b.id
)select * from area order by px,px2
可以查詢(xún)出結(jié)果—-所有分類(lèi)及相應(yīng)分類(lèi)下子分類(lèi)
id title parentid
1 廣東省 0
2 廣州 1
3 白云區(qū) 2
4 深圳 1
5 湖南省 0
6 長(zhǎng)沙 5
7 株洲 5
with area as(
select * from region where parentid=1
union all
select a.* from region a join area b on a.parentid=b.id
)select * from area
可以查詢(xún)出結(jié)果—-指定分類(lèi)及相應(yīng)分類(lèi)下子分類(lèi)
id title parentid
1 廣東省 0
2 廣州 1
3 白云區(qū) 2
性能分析:
對(duì)于一個(gè)3500條地區(qū)記錄的數(shù)據(jù)表,其中有省,市,縣3級(jí)
查詢(xún)用時(shí)要1秒,視覺(jué)上感覺(jué)有點(diǎn)點(diǎn)慢,但不影響
數(shù)據(jù)量不大的分類(lèi),使用絕對(duì)無(wú)壓力
對(duì)性能影響很大。
如果用SQL下面的CTE遞歸處理的話(huà),一次性就能把結(jié)果給查詢(xún)出來(lái),而且性能很不錯(cuò)
比用程序處理(數(shù)據(jù)量很大的情況),臨時(shí)表性能更好,更方便
復(fù)制代碼 代碼如下:
with area as(
select *,id px,cast(id as nvarchar(4000)) px2 from region where parentid=0
union all
select a.*,b.px,b.px2+ltrim(a.region_id) from region a join area b on a.parentid=b.id
)select * from area order by px,px2
可以查詢(xún)出結(jié)果—-所有分類(lèi)及相應(yīng)分類(lèi)下子分類(lèi)
id title parentid
1 廣東省 0
2 廣州 1
3 白云區(qū) 2
4 深圳 1
5 湖南省 0
6 長(zhǎng)沙 5
7 株洲 5
復(fù)制代碼 代碼如下:
with area as(
select * from region where parentid=1
union all
select a.* from region a join area b on a.parentid=b.id
)select * from area
可以查詢(xún)出結(jié)果—-指定分類(lèi)及相應(yīng)分類(lèi)下子分類(lèi)
id title parentid
1 廣東省 0
2 廣州 1
3 白云區(qū) 2
性能分析:
對(duì)于一個(gè)3500條地區(qū)記錄的數(shù)據(jù)表,其中有省,市,縣3級(jí)
查詢(xún)用時(shí)要1秒,視覺(jué)上感覺(jué)有點(diǎn)點(diǎn)慢,但不影響
數(shù)據(jù)量不大的分類(lèi),使用絕對(duì)無(wú)壓力
相關(guān)文章
一次SQL調(diào)優(yōu)數(shù)據(jù)庫(kù)性能問(wèn)題后的過(guò)程(300W)
對(duì)單表超過(guò)300w+數(shù)據(jù)的Web應(yīng)用程序進(jìn)行測(cè)試后發(fā)現(xiàn)了一些功能、性能問(wèn)題,采取了以下辦法來(lái)進(jìn)行調(diào)整2010-03-03在SQL Server中使用ISNULL執(zhí)行空值判斷查詢(xún)
這篇文章主要介紹了在SQL Server中使用ISNULL執(zhí)行空值判斷查詢(xún),ISNULL的好處是可以直接寫(xiě)在SELECT查詢(xún)語(yǔ)句中,需要的朋友可以參考下2014-08-08SQL中查找某幾個(gè)字段完全一樣的數(shù)據(jù)
本文分享SQL語(yǔ)句實(shí)現(xiàn)表中字段的組合累加排序的實(shí)例代碼,希望能給大家做一個(gè)參考。2016-06-06SQLServer存儲(chǔ)過(guò)程中事務(wù)的使用方法
這篇文章主要介紹了SQLServer存儲(chǔ)過(guò)程中事務(wù)的使用方法,簡(jiǎn)短的代碼帶大家更好的學(xué)習(xí)使用SQLServer存儲(chǔ)過(guò)程中事務(wù),感興趣的小伙伴們可以參考一下2015-12-12

distinct 多列問(wèn)題結(jié)合group by的解決方法
distinct 多列問(wèn)題 group by 解決
2010-06-06 
設(shè)定sql server定期自動(dòng)備份數(shù)據(jù)庫(kù)
設(shè)定sql server定期自動(dòng)備份數(shù)據(jù)庫(kù)...
2007-01-01