好的,我知道何时应该使用索引以及使用它的利弊的基础知识。
这些是我的查询的(唯一)两种方式:
SELECT target_id FROM map WHERE table_name = '' AND fingerprint = '' AND source_id = 1;
和
SELECT fingerprint, source_id FROM map WHERE table_name = '' AND target_id = 1;
我知道我必须索引字段table_name
,fingerprint
并source_id
通过第一次查询。也target_id
通过第二个查询。我可以单独做。但是我听说如果我可以将所有字段作为一个索引,复合键会提供更好的性能。由于我的情况非常具体,不会有另一个 WHERE 子句,我想创建这样的复合键:
(table_name, fingerprint, source_id)
和
(table_name, target_id)
但由于table_name
两个复合索引都有重叠,我不确定这是否是要走的路。这种重叠是否会对性能产生影响?
当我进行一些测试时,我没有得到任何性能改进,两者都同样快。我现在只有几万条记录,可能就是这个原因。但数据将扩展到数百万条记录。所以我想征求专家意见。谢谢。