首页 > 解决方案 > Oracle 综合指数表现

问题描述

我的示例 oracle 查询结构是这样的:

SELECT <LIST_OF_COLUMNS> FROM <TABLE_NAME>
WHERE COLUMN_01 = <SOMETHING> AND COLUMN_02 = <SOMETHING> AND COLUMN_03 = <SOMETHING>

该表有超过 100 万条记录。我已经分别索引了 COLUMN_01、COLUMN_02 和 COLUMN_03。上述查询工作正常,并按预期提供结果。

如果我将 COLUMN_01、COLUMN_02 和 COLUMN_03(子句中的所有列WHERE)作为复合索引而不更改现有索引,它会提高性能吗?如果是这样,是否有复合索引列的顺序?

如果我使用OR而不是AND喜欢这个查询,它会提高性能吗?

SELECT <LIST_OF_COLUMNS> FROM <TABLE_NAME>
WHERE COLUMN_01 = <SOMETHING> OR COLUMN_02 = <SOMETHING> OR COLUMN_03 = <SOMETHING>

标签: oracleperformanceindexingquery-optimizationsql-tuning

解决方案


如果我将 COLUMN_01、COLUMN_02 和 COLUMN_03(WHERE 子句中的所有列)作为复合索引而不更改现有索引,它会提高性能吗?

对于此查询:可能。对于 INSERT/UPDATE/DELETE:性能会下降。

因此,您需要衡量并查看某些查询的改进是否证明其他查询的恶化是合理的。

如果是这样,是否有复合索引列的顺序?

不适用于此查询。如果您对索引进行前缀压缩,则可以选择压缩最佳的顺序,否则无关紧要。

但是,可能有其他查询只使用一些索引列,在这种情况下,您需要确保实际使用的列位于索引的前沿。

如果我像这个查询一样使用 OR 而不是 AND,它会提高性能吗?

不。在这种情况下,需要单独的索引(您已经拥有)。


推荐阅读