回答
否,索引將不被用於各個字段創建。
如果你有一個組合大關鍵FIELDA,FieldB,FieldC你
select * from MyTable where FieldA = :a
或
select * from MyTable where FieldA = :a and FieldB = :b
然後,它會使用這個索引(因爲他們是關鍵中的前兩個字段)
如果你有
select * from MyTable where FieldB = :b and FieldC = :c
如果您正在使用索引的某些部分,而不是完整的索引,則通過索引跳過掃描,完整索引掃描或快速全索引掃描,索引的使用效率會降低。
(感謝大衛·阿爾德里奇的校正)
您將獲得跨越多個列一個索引,這是不一樣的有每列索引。
主鍵是隻有一個(唯一的)索引,可能含有多個列
索引不必是支持主鍵的唯一類型。在某些情況下(可延遲的約束或物化視圖上的PK),您實際上肯定會想要一個非唯一索引。 – 2009-02-10 21:10:02
如果您創建列的主鍵(A,B,C),那麼甲骨文將默認創建(A,B。C)唯一索引。你能告訴Oracle使用不同的(不一定是唯一的)現有的索引是這樣的:
alter table mytable add constraint mytable_pk
primary key (a, b, c)
using index mytable_index;
對於B選擇索引將被使用,如果列中的僅具有低基數(例如,僅具有2的值)。 一般而言,如果您想象列沒有單獨編制索引,而是索引列連接(這不完全正確,但它適用於第一次近似),則可以猜出此答案。 所以它不是a,b指數,它更像是一個|| b指數。
主鍵意味着在主鍵列上創建composite unique index
。
您可以使用名爲INDEX SKIP SCAN
使用這個指數與不包括第一個索引列謂詞一個特殊的訪問路徑:
SQL> CREATE TABLE t_multiple (mul_first INTEGER NOT NULL, mul_second INTEGER NOT NULL, mul_data VARCHAR2(200))
2/
Table created
SQL> ALTER TABLE t_multiple ADD CONSTRAINT pk_mul_first_second PRIMARY KEY (mul_first, mul_second)
2/
Table altered
SELECT /*+ INDEX_SS (m pk_mul_first_second) */
*
FROM t_multiple m
WHERE mul_second = :test
SELECT STATEMENT, GOAL = ALL_ROWS
TABLE ACCESS BY INDEX ROWID SCOTT T_MULTIPLE
INDEX SKIP SCAN SCOTT PK_MUL_FIRST_SECOND
您可能需要根據您的主鍵列上設置單獨的索引結構體。
複合主鍵和索引將按照以下方式創建索引。假設我有A,B,C列,並且我在(A,B,C)上創建了主鍵。這將導致在索引
- (A,B,C)
- (A,B)
- (A)
甲骨文實際上創建任意的最左邊的一個索引列分組。所以......如果你想在列B上創建一個索引,那麼你必須爲它創建一個索引以及主鍵。
P.S.我知道MySQL exibits這留下最多的行爲,我認爲SQL Server也是最左邊
Oracle只會在(A,B,C)上創建一個索引。你可以創建其他的,但Oracle需要並且只需要一個索引來執行一個主鍵。它必須包括PK的所有列。 – redcayuga 2010-03-11 19:13:56
在Oracle中,這不是一個準確的聲明。它只在(A,B,C)上創建1個索引。不會創建(A,B)和(A)索引。
- 1. 主鍵是否自動成爲索引?
- 2. 我們是否需要將主鍵添加到多列索引?
- 3. Mysql外鍵引用兩個列,它們是兩個不同表中的主鍵
- 4. 值得在列上添加索引只是爲了讓它們成爲外鍵?
- 5. SQLite多列主鍵是否需要額外的索引?
- 6. 是否指定一個外鍵使其成爲索引?
- 7. Google Map多邊形是否索引/我如何引用它們的索引?
- 8. 主鍵(> 1列)上的索引(1列)是否有用? (SQL)
- 9. 主鍵是否自動索引?
- 10. 爲MySQL InnoDB聚集索引使用組合主鍵是否好?
- 11. 如果一列是主鍵,它需要在索引
- 12. 非主鍵列MySQL索引
- 13. 主鍵也是索引嗎?
- 14. 是否有必要在主鍵列上具有PRIMARY索引和colname索引?
- 15. 在多列主鍵的第一列上定義索引是多餘的嗎?
- 16. 當fk列是pk的子集時,主鍵索引是否會用作外鍵的索引?
- 17. 是否可以爲多個列創建一個索引? hiberanate
- 18. Javascript生成的SVG文本是否被搜索引擎索引?
- 19. 外鍵是否總是引用主鍵?
- 20. 是否可以使用主鍵引用在列中插入值?
- 21. 使用主鍵作爲索引
- 22. Datanucleus JDO檢索新生成的主鍵
- 23. Django會自動爲外鍵列生成索引嗎?
- 24. 使用sqldeveloper爲多個索引生成SQL
- 25. SQLite中的主鍵是否需要索引?
- 26. 服務器生成的數據是否被索引爲搜索引擎?
- 27. 多列索引中主鍵的優先級?
- 28. 爲索引列表生成CREATE腳本
- 29. 爲陣列生成隨機索引
- 30. 多索引中的多個唯一鍵
您可能想要更正索引使用部分 - 索引跳過掃描,完整索引掃描或快速全索引掃描是允許索引用於所有這些情況的機制。 – 2009-02-10 21:08:31