利用二叉樹特性優化省市鎮三級聯動效能
省市鎮存入資料庫一張表Area:
ID |
Name |
ParentID |
1 |
廣東 |
null |
2 |
廣州 |
1 |
3 |
雲浮 |
1 |
4 |
白雲區 |
2 |
5 |
天河區 |
2 |
6 |
廣西 |
null |
7 |
河池 |
6 |
selectProvince.*from Area Province
inner join Area City
on City.ParentID =Province.ID
inner join Area Town
on Town.ParentID =City.ID
where
如果一個頁面上出現這樣的篩選很頻繁,則會加慢速度。
解決辦法可以很多,加快取,但如果要優化資料庫查詢,則需要對這個表做些手腳,怎麼做呢?
1.這裡我們要明確的是要解決的問題是什麼:是怎樣能提高根據父級節點查詢子樹的速度。
2.根據二叉樹儲存節點值的特性:每個節點值總是小於其右子樹的節點值。也就是說節點值有記錄子樹節點值範圍的作用。利用這點,我們可以構造類似的樹:
(要注意的是,這個節點值,跟省市鎮的id是不同的概念,是沒有關係的)
3.也就是說,這種做法,是要一次性全體定死左右屬性值的。不過這也不是大問題,省市鎮的資料改動少,需要改動的時候,再全體Update一次。這就是折優的方案。
具體實現的程式碼我就不貼了,提供了思路,希望讀者自己去敲下來,加深理解。