【发布时间】:2014-11-12 13:32:08
【问题描述】:
如果我运行查询索引中这些列的某些子集的 SELECT 语句,是否可以保持为 MySQL 表上的多个列设置索引的性能和效率优势?
所以,如果我在 A、B 和 C 列上设置了索引,但我的语句只查询 A 和 B 列,这与根本没有设置索引是一样的。我是否需要专门为 A 和 B 设置另一个索引才能通过查询获得任何性能优势?
【问题讨论】:
-
你不能告诉
EXPLAIN吗? dev.mysql.com/doc/refman/5.0/en/explain-output.html -
所以,如果我运行像
select * from T where A = 'blah'这样的查询,并且我在 A、B 和 C 列上有一个名为 MyKey 的key设置,explain告诉我我的 MyKey 将被选为那个特定的查询,这是否意味着我正在获得使用键/索引的索引优化? -
就像@rene 建议的那样,用 EXPLAIN 试试,你会看到的。
-
在这种情况下,验光师很可能会选择在您索引之后进行。根据假设的 A、B 索引和现有 A、B、C 索引之间的粒度差异,您很可能会发现使用第二个 A、B 索引的性能更好,但会产生存储空间成本以及写入成本附带索引。除非您的表很大并且粒度差异很大,否则您可能对原来的 A、B、C 索引没问题。
-
请注意,对于索引中列的子集,它还取决于列。因此,如果您有一个涵盖列 A、B 和 C 的索引,那么检查列 A 的 WHERE 子句可以使用该索引。只检查列 B 或 C 的 WHERE 子句不能使用索引。