Closed kevinLoe closed 12 years ago
http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/greater-less-between-tuning-sql-access-filter-predicates 這裡有講到WHERE clause裡的兩個equation,如何決定排序的先後?以及一些data structure。
1.應該是一開就建好,存成檔案,MySQL是這樣做的 2.我覺得應該是照LexicalOrder,當然轉成字碼用字碼排序也可以 3.這種情況B樹應該不適用,遇到這種情形可能就Scan其中一方的BTree把所有的值都丟到另一個table的BTree做搜尋,雖然感覺沒效率,但是跟暴搜O(n*m)比還是比較好一點 (O(nlogm)) 4.可不可以直接指Primary Key? 因為PK可以直接代表一個Tuple而不會有撞值的問題
ps.其實我在想,如果一開始INSERT的資料沒有PK,我們可不可以依照被INSERT的順序偷偷給他放上一個PK(0,1,2....)這樣,我們如果要做B+樹任何種類的資料都可以直接ref到PK (但是比對資料重複就只能一個欄位一個欄位比了...)
Data Object-->PK-->Tuple 這樣
先舉例 B+ tree SELECT name FROM employee WHERE ID > 100 這個指令用B+ tree應該是不會很困難,我的想法是leaf node有數個data object(以這個例子來說,attribe有ID和reference(指到這個ID的 tuple,可能存在disk)),以及一個reference(指向下一個leaf node)。所以照這樣說是要先判斷WHERE clause,再把table檔案全部讀取出來建立tree結構,有幾個問題