oracle - 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>
解决方案
如果我将 COLUMN_01、COLUMN_02 和 COLUMN_03(WHERE 子句中的所有列)作为复合索引而不更改现有索引,它会提高性能吗?
对于此查询:可能。对于 INSERT/UPDATE/DELETE:性能会下降。
因此,您需要衡量并查看某些查询的改进是否证明其他查询的恶化是合理的。
如果是这样,是否有复合索引列的顺序?
不适用于此查询。如果您对索引进行前缀压缩,则可以选择压缩最佳的顺序,否则无关紧要。
但是,可能有其他查询只使用一些索引列,在这种情况下,您需要确保实际使用的列位于索引的前沿。
如果我像这个查询一样使用 OR 而不是 AND,它会提高性能吗?
不。在这种情况下,需要单独的索引(您已经拥有)。
推荐阅读
- c# - 将自适应卡片 JSON 添加到机器人脚本 - C#
- vega-lite - Vega-Lite 地图没有正确显示
- angular - Kendo Angular Popup 给出“HTMLAnchorElement 不可分配给类型 ElementRef”
- python-3.x - 比较两个列表列表并填写空白值
- c# - 一次列出多个对象的声明
- python - 比较 Python 中两个列表的每个项目不是预期的答案
- scala - 如何限制 Scala 对象中所有方法的类型?
- java - Spring Batch 应用 sqlcode -4499 sqlstate 08001
- sql - 如何估计 RDBMS 服务器每秒可以处理的最大读写次数?
- pointers - 指针的正确分配