哪些索引是必要的?

fil*_*ppo 0 oracle indexing compound-index

如果我有一张桌子TABLE_1,可以说5列:

COL1    |   COL2    |   COL3    |   COL4    |   COL5
[line]
[line]
[...]
Run Code Online (Sandbox Code Playgroud)

我想要做两个主要的查询:

SELECT * FROM table_a WHERE COL1 = 'X' and COL2 = 'Y'
Run Code Online (Sandbox Code Playgroud)

而另一个是:

SELECT * FROM table_a WHERE COL2 = 'Z'
Run Code Online (Sandbox Code Playgroud)

我应该创建哪些索引?使用列创建一个COL1并COL2为两个查询编制索引,或者我是否需要另一个索引COL2才能使第二个查询更快?

谢谢!

Vin*_*rat 5

table_a(COL2, COL1)两个查询都可以使用常规B树索引.

COL2单独使用索引可能会更有效地仅使用此列上的过滤器来检索行,但附加索引将使用空间并减慢插入速度(如果更新此列,则会更新).这是一种权衡.

  • 它可以索引跳过扫描第一列,如果基数很低,除非您知道这一点,否则您无法就要创建的索引/索引做出明智的决定. (2认同)
  • 还有别的东西需要考虑; 如果`COL2`不是特别选择并且你有大量的数据,你可能想要`COMPRESS`索引 - `CREATE INDEX ...(COL2,COL1)COMPRESS 1 (2认同)