【问题标题】:Index created on each column when creating a compound key?创建复合键时在每列上创建的索引?
【发布时间】:2013-11-19 23:50:54
【问题描述】:

假设我在 col1、col2、col3 上创建了一个复合主键,是否会在每个列上创建索引?

我知道主键约束会为 (col1, col2, col3) 的组合创建索引,这样对这 3 列的搜索会更快。但我不确定数据库是否会在每个列上创建索引,以便对单个列的搜索(如在 column2 上的搜索)加快速度。

谁能告诉我这些列在索引方面发生了什么?

【问题讨论】:

  • 我不知道特定列的索引。我认为您需要自己添加
  • 高度依赖于您使用的实际数据库(SQL 只是查询语言......不是数据库产品)。但通常,我希望在三列的组合上创建 一个索引 - 但不是每列上的单独索引。因此,这样的复合索引仅对使用索引中最左边的 n 列的查询有用——当然,那些使用所有三个列的查询,那些使用 col1, col2 的查询,以及只使用 col1 的查询——但是这个索引将 不对仅使用col3的查询有用

标签: sql database search indexing


【解决方案1】:

这取决于。通常将创建一个索引,因此只有使用“最左边”列的查询才能使用它,即在您的示例中“SELECT * from T where COL2='x'”将不使用该索引。也就是说,Oracle 可以在第一列被压缩的地方使用索引“跳过”,并且计划可以跳过它查看下一列。

您最好的方法是查看手册并在您选择的 DBMS 中尝试,然后查看查询计划。

总结:视情况而定。

【讨论】:

    猜你喜欢
    • 2013-05-15
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多