SELECT MIN(id)
FROM mytable
WHERE lastname IN('Smit','Lee')
GROUP BY name
在这里,为了优化这个查询,索引需要(将很有用)列lastname对吗?和列名也需要索引?还是只有索引姓氏就足够了?
SELECT MIN(id)
FROM mytable
WHERE lastname IN('Smit','Lee')
GROUP BY name
在这里,为了优化这个查询,索引需要(将很有用)列lastname对吗?和列名也需要索引?还是只有索引姓氏就足够了?
lastname 上的索引通常对该查询很有用。索引名称不应该有效果。
您可以(并且应该)使用 EXPLAIN 来查看 MySQL 将如何执行您的查询。
在编程中生活的一个好规则是永远不要假设你知道什么是慢或快。总是测试它。
签出这个链接MySQL profiling。在您认为可以工作的地方添加索引,然后运行一些测试。
两个建议的索引都应该对您的情况有所帮助,但这在很大程度上取决于您拥有的数据以及数据库引擎考虑某些操作的成本有多高,这取决于您是否有重复的 id,我怀疑您没有,那就是为什么它被称为 id,但如果你在lastname, id
or上做一个 2 列索引name, id
也会有帮助。最终,查询优化器将决定用于获取数据的策略,这肯定会影响很多事情......我建议您尝试以下方法,看看哪个更快
lastname
- 可能name
- 不太可能lastname, name
- 最有可能name, lastname
- 最不可能同样,它确实取决于数据,但我按照我认为它们应该对具有唯一 id 的大量数据最有帮助的顺序进行了标记,如果您的 id 不是唯一的,请尝试与 id 上的索引组合。