单列索引与多列索引用于单独但始终在一起的联接
Single-column vs. multi-column index for separate but always together joins
如果我有这样的架构:
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 个索引?
这取决于选择的连接类型:
对于嵌套循环连接,查找连接条件的索引 tables 会有所帮助。
对于散列连接,索引没有帮助。
对于合并联接,thr 查找的联接条件索引 table 可能会有所帮助。
这完全取决于基数。
多列索引肯定是错误的。
如果我有这样的架构:
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 个索引?
这取决于选择的连接类型:
对于嵌套循环连接,查找连接条件的索引 tables 会有所帮助。
对于散列连接,索引没有帮助。
对于合并联接,thr 查找的联接条件索引 table 可能会有所帮助。
这完全取决于基数。
多列索引肯定是错误的。