我有一個巨大的表(在Oracle 12c中),當然這需要索引。 這張表也經常更新,所以如果我學到的東西是正確的,那麼我在這個表上的索引越少,表示DML操作的性能就越好。索引,索引,索引
當然,我想擁有正確數量的索引,以便對它的查詢不受影響。
我把這個小例子作爲一種創建索引的指南。這看起來準確嗎?
CREATE INDEX FOO ON FOO.BAR ("COL1", "COL2", "COL3"); -- COL1 should be the column which is most frequently queried
SELECT * FROM FOO WHERE COL1 = 'FOO'; -- uses index FOO
SELECT * FROM FOO WHERE COL1 = 'FOO' AND COL2 = 'BAR'; -- uses index FOO
SELECT * FROM FOO WHERE COL1 = 'FOO' AND COL2 = 'BAR' AND COL3 = 'BAZ' -- uses index FOO
所以就沒有必要在col1或COL2單個索引..如果COL3由本身查詢
(其中,COL3 =「等等」)
我需要一個col3上的索引。
如果COL2和COL3是一起查詢
(其中COL2 = '嗒嗒' 和COL3 = 'blahblah')
然後我需要col2上,COL3指數...但如果我有一個查詢在哪裏col2和col3一起使用比我不需要在任何一個單一的索引。 這一切聽起來如何?
「巨大的桌子」是一個術語,對不同的人意味着不同的事物。告訴我們您有多少行,多少列,您的操作系統,分配了多少內存,您注意到了哪些性能問題,這是一個新表格或現有表格,生產數據庫還是測試? – kevinsky
我有一個200GB的表,其中200GB的索引每秒更新〜170次...上下文就是一切,你應該做你所需要的。 – Ben
該表格的大小爲5 GiB,並將增長...它有24列...我意識到事情通常是針對具體情況而定的,但我只是在尋找一些一般的見解。 OS是SuSE,內存爲4 GiB。測試數據庫所以會有更多的資源來生產... – benjamin