Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设我在 col1、col2、col3 上创建了一个复合主键,是否会在每个列上创建索引?
我知道主键约束将为 (col1, col2, col3) 的组合创建索引,以便对这 3 列的搜索更快。但我不确定数据库是否会在每个列上创建索引,以便对单个列的搜索(如在 column2 上的搜索)加快速度。
谁能告诉我这些列在索引方面会发生什么?
这取决于。通常将创建一个索引,因此只有使用“最左边”列的查询才能使用它,即在您的示例中“SELECT * from T where COL2='x'”将不使用该索引。也就是说,Oracle 可以使用索引“跳过”,其中第一列被压缩,并且计划可以跳过它查看下一列。
您最好的方法是查看手册并在您选择的 DBMS 中尝试,然后查看查询计划。
总结:视情况而定。