Sql 单列索引与多列索引,用于单独但始终在一起的联接
如果我有这样一个模式:Sql 单列索引与多列索引,用于单独但始终在一起的联接,sql,postgresql,database-design,outer-join,database-indexes,Sql,Postgresql,Database Design,Outer Join,Database Indexes,如果我有这样一个模式: profile_network --- id profile_id(fk) school_type_id(fk) school_major_type_id(fk) school_degree_type_id(fk) 以及一个查询,该查询将始终用于将所有这些查询连接到各自的查找表: LEFT JOIN "profile_network" ON "profile_network"."profile_id" = "profile"."id" LEFT JOIN "profil
profile_network
---
id profile_id(fk) school_type_id(fk) school_major_type_id(fk) school_degree_type_id(fk)
以及一个查询,该查询将始终用于将所有这些查询连接到各自的查找表:
LEFT JOIN "profile_network" ON "profile_network"."profile_id" = "profile"."id"
LEFT JOIN "profile_network_school_type" ON "profile_network:school_type"."id" = "profile_network"."school_type_id"
LEFT JOIN "profile_network_school_major_type" ON "profile_network:school_major_type"."id" = "profile_network"."school_major_type_id"
LEFT JOIN "profile_network_school_degree_type" ON "profile_network:school_degree_type"."id" = "profile_network"."school_degree_type_id"
我应该在每个列
(col1)(col2)(col3)(col4)
上创建4个索引,还是在所有列(col1,col2,col3,col4)
上创建1个索引?这取决于选择的联接类型:
- 对于嵌套循环联接,查找表的联接条件索引将有所帮助
- 对于散列联接,没有索引帮助
- 对于合并联接,有关thr查找表的联接条件的索引可能会有所帮助
多列索引肯定是错误的。我会选择第一个版本。请注意,如果使用索引,它可能会定义
JOIN
s的顺序。阅读有关使用索引的内容的时间到了。哪些参考文献提到了与此相关的内容,包括?一个合理的答案就是重写这样一个引用。我想知道左连接A左连接B
的索引是否与的索引作用类似,其中A和B
。对于中的A和B
,我通常更喜欢单独索引(A)(B)
,或者使用连接的反向索引(B,A)
,而不是(A,B)
,因为它不会单独使用B
的索引,但我不确定连接的行为是否类似。没有索引的查询会进行哈希连接。所以听起来,即使我给它添加了一个或4个索引,它已经尽了最大的努力了?我认为,在这个数据库中,与学校相关的内容将被视为低到中等基数,特别是因为只有10个配置文件行。:)您必须使用EXPLAIN
进行实验。这样,您就可以看到是否使用了索引,并且知道数据库使用了哪种连接策略。