Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 单列索引与多列索引,用于单独但始终在一起的联接_Sql_Postgresql_Database Design_Outer Join_Database Indexes - Fatal编程技术网

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
进行实验。这样,您就可以看到是否使用了索引,并且知道数据库使用了哪种连接策略。