Oracle 综合指数性能

标签 oracle performance indexing query-optimization sql-tuning

我的示例 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>

最佳答案

  • 如果基于三列创建复合索引
    您永远不会只使用 WHERE 中的一列来查询表
    子句,您将不需要单列索引。否则,它
    取决于哪些列参与查询。而这个案例应该
    得到很好的分析和测试。
  • 复合索引中的列顺序 事情。列应按唯一性排序,其中最不明显的列排在第一位。它有助于减少与查询谓词匹配的行数,从而提高性能。
    还应该注意的是,Oracle 可以对不包含谓词中的所有索引列的查询使用复合索引。

  • 例如:
    create index idx1 on table_name (col1, col2, col3);
    
    /*In this query Oracle can use index idx1 as a standard one-column index, 
      because col1 is the first column in the index*/
    select * from table_name where col1 = 'some_value';
    
    /*Here Oracle can still use the composite index, 
      but in this case it will use INDEX SKIP SCAN (assuming col1 equals ANY value),
      which reduces query performance comparing to an ordinary index*/
    select * from table_name where col2 = 'some_value1' and col3 = 'some_value2';
    
  • ORAND运营商在这里并不重要。更重要的是匹配给定谓词的行数 .
  • 关于Oracle 综合指数性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55255998/

    相关文章:

    oracle - 使用 Oracle 11g hibernate 无法与 "select"生成器一起使用

    php - 选择不同组的不同值

    javascript - 括号表示法可以用来压缩/混淆 JavaScript 吗?

    matlab - 索引移动极差

    regex - MongoDB:哪个更快?正则表达式搜索字符串还是直接搜索数组?

    sql - Oracle:有没有办法使用 unix crypt 方法对值进行编码?

    java - oracle关闭连接时如何抛出错误?

    ios - UITableView 索引

    java - 未找到 WFMLRSVCApp.ear 文件

    c# - SQLite:.Net 比原生慢很多?