假设我在col1,col2,col3上创建了一个复合主键,是否会在每列上创建索引?
我知道主键约束将为(col1,col2,col3)的组合创建索引,以便对这3列的搜索更快。但我不确定数据库是否会在每个列上创建索引,以便单个列上的搜索(如在column2上搜索)将加快。
有人可以告诉我这些列在索引方面会发生什么吗?
答案 0 :(得分:0)
这取决于。通常会创建一个索引,因此只有使用“最左侧”列的查询才能使用它,即在您的示例中“SELECT * from T,其中COL2 ='x'”将不使用索引。也就是说,Oracle可以使用索引“skip”,其中第一列被压缩,计划可以跳过它,查看下一列。
您最好的方法是查看手册并在您选择的DBMS中尝试,然后查看查询计划。
总结:这取决于。