我正在使用PostgreSQL 8.1,我有一个表,其中包含3个元素的复合主键,没有其他索引: 主要关键(el1,el2,el3)
如果我执行SELECT * FROM table WHERE el1 IN(...)之类的选择操作,操作是否会考虑主键包含el1的事实,或者它会更慢,因为没有可以帮助的索引?
感谢。
答案 0 :(得分:1)
多列B树索引可以与查询条件一起使用 涉及索引列的任何子集,但索引最多 在领先(最左边)有限制时有效 列。确切的规则是对领导的平等约束 列,以及第一列上的任何不等式约束 没有等式约束,将用于限制部分 扫描的索引。
您还可以尝试在查询上运行解释计划以确定此行为。
答案 1 :(得分:0)
Postgres - 以及我所知道的每个SQL引擎 - 都可以使用多字段索引中的前一个或多个字段。在您的情况下,索引所在的位置(el1,el2,el3),它可以使用索引作为“where el1 = x”或“where el1 = x和el2 = y”的查询。
如果您没有为el1指定值,则无法使用索引。就像“select ... where el2 = y”一样,索引也没用。