2013-07-30 73 views
1

在Oracle中,如果我在列上創建索引,這是否意味着數據將根據該列自動排序?否則,如何能夠更快地搜索基於索引的數據?如果它沒有排序,它是隨機的...所以使用列作爲where子句不應該更快。創建索引時是否自動對數據進行排序

回答

2

如果您創建index organized table,表格將根據索引進行物理排序,但這不是通常的索引類型

當你做一個「正規」的指標是這樣的:

CREATE INDEX myIndex ON myTable(myColumn) 

...它變化在表中的行的順序。相反,它會創建一個單獨的索引對象。該索引是有序的,搜索速度更快,因爲Oracle在索引中搜索而不是掃描表,並且索引的結構已經過優化,可以快速查找條目。

每個索引條目都包含一個指向表的指針,所以一旦Oracle完成索引搜索,它就有一個錶行指針的列表,並且它使用這些指針來訪問表。

我在這個答案的頂部給出的鏈接也涵蓋了「常規」索引,並詳細解釋了所有這些。

+0

根據您的解釋,如何在已經有idex的情況下添加分區有幫助?如果它確實如此?如果你認爲它更好,我可以單獨詢問這個問題 – Victor

+0

如果表格非常龐大,或者在其他一些狹窄的情況下,它會有所幫助。有更多的信息(實際上可能是太多的信息)[這裏](http://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm)。如果你有一個特定的場景,並且想知道你是否應該進行分區,我會建議在[dba.stackexchange.com](http://dba.stackexchange.com/)上發佈這個問題(詳細信息),因爲分區開始進入「硬核」DBA的東西。 –

相關問題