2013-08-04 45 views
0

在這個YouTube教程here位圖索引是否創建原始表的副本?

看來,位圖索引將始終創建整個表時創建索引的副本。因爲它會創建索引並針對每一行,它會將0或1放在一起。我的下劃線是否錯誤? otehr的事情是,在教程結束時,似乎位圖索引無法在!=運算符上運行。 我認爲=!=對我來說似乎與索引的POV一樣。

回答

2

對於至少一個不同值,表中的每一行均以單個位(即0或1)表示。我不確定這可以被認爲是整個表的複製品,因爲這意味着所有的數據都被複制,而其他列中的數據顯然不存在。但它確實包含整個表的數據,因爲每一行都被表示(可能多次,除了一個位都被設置爲零)。

concepts guide解釋發生了什麼:

位圖中的每一位對應一個可能的ROWID。如果該位設置爲 ,則具有相應rowid的行將包含鍵值。 映射函數將位位置轉換爲實際的rowid,因此位圖索引提供的功能與B樹索引 相同,但它使用不同的內部表示。

storage structure is also explained

再加上那個,當你把它看作一個二維數組時,爲什麼每一行都必須代表每個值,這就變得更加清楚了。在文檔example中,每行的值必須用其中一個不同的值表示,因此數組的「列」必須只有一個位設置爲1.無法創建「列」 '全部爲零 - 如果列可以爲空,那麼null將是數組中的另一個值,並且表中的空列將該索引中的該位設置爲1 - 對於表中的行,所以它不會有意義的不是有每一行代表。

您可以擁有一個全爲零的數組'列',但僅限於不存在的行。 '位圖中的每一位對應於一個可能的rowid',而不一定是實際的行。從存儲描述中可以看到,位圖的存儲範圍爲rowid s,該範圍內的rowid值可能不會指向實際行(在此表中)。

這就是測試不平等問題的原因。您不能只看數組中的一行,並且說'M'行中設置爲零的任何內容都與!= 'M'匹配,因爲該位代表的rowid可能實際上並不是表中的一行。從某種意義上說,有些設置爲零並不能告訴你任何明確的事情;只有一點設置爲1。因此,對於不平等條件,必須檢查整個指數以找出任何其他值爲1的值。


1 - 邏輯上的每一行被表示爲每一個值,但實施例的數據存儲在文檔中示出了不同的範圍rowid爲不同的值;我想在所有位都爲零的範圍內存儲索引數據沒有意義,只適用於至少有一位爲1的範圍。但是,所有行仍然至少在一個索引條目中表示,某位設置爲1。我可能讀了太多的關於存儲內容的概念圖。

相關問題