我有一个巨大的表(在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