自从hitlisted_date
并且该组合将被频繁使用,您希望在两列上使用复合索引hitlisted_date
first:
CREATE INDEX i1_hitlist ON hitlist(hitlisted_date, deleted_date);
该索引可以(并且将会)用于具有合适条件的查询hitlisted_date
单独或两个日期。
您可能会发现有第二个索引是有益的deleted_date
:
CREATE INDEX i2_hitlist ON hitlist(deleted_date);
这可用于仅搜索deleted_date
。如果您有时对单个删除日期和一系列命中列表日期进行搜索,那么您可能会发现最好使用与以下相反的复合索引i1_hitlist
:
CREATE INDEX i2_hitlist ON hitlist(deleted_date, hitlisted_date);
它不太可能有帮助,但唯一确定的方法就是尝试一下看看。这取决于您的查询模式以及查询使用的实际条件。
单纯的指数并没有真正的优点hitlisted_date
;它只会妨碍优化器(因为它必须查看两个索引并决定哪个更好,并且因为插入、更新和删除行时还有更多工作要做)。命中列表日期不太可能是唯一索引。如果可以的话,那么保留单列索引和重复索引就有一个单独的原因。 (也可以看看如果 (A, B, C) 上有索引,那么 (A,B) 上的索引是否多余 https://stackoverflow.com/questions/13791317/is-an-index-on-a-b-reundant-if-there-is-an-index-on-a-b-c/.)
更改索引后,请确保统计信息是最新的(现在或多或少是自动的,但它曾经很重要),然后使用 SET EXPLAIN on 运行查询以检查索引是否正在使用(以及哪些索引正在使用)。正在使用)。