想象一个具有多列的表,例如,id, a, b, c, d, e
。我通常选择通过id
但是,客户端应用程序中有多个查询对列的子集使用各种条件。
当MySQL在多列上使用多个WHERE条件对单表执行查询时,它真的可以利用在不同列上创建的索引吗?或者使其快速的唯一方法是为所有可能的查询创建多列索引?
是的,MySQL 可以对单个查询使用多个索引。优化器将确定哪些索引将有利于查询。您可以使用EXPLAIN
获取有关 MySQL 如何执行语句的信息。您可以使用提示添加或忽略索引,如下所示:
SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX FOR ORDER BY (i2) ORDER BY a;
我建议阅读MySQL 如何使用索引 http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html.
仅摘录几段:
如果需要在多个索引之间进行选择,MySQL 通常会使用
查找最小行数的索引。
如果 col1 和 col2 上存在多列索引,则相应的
可以直接获取行。如果存在单独的单列索引
在 col1 和 col2 上,优化器将尝试使用索引合并
优化(参见第 8.2.1.4 节“索引合并优化”),或
尝试通过确定哪个索引来找到最具限制性的索引
找到更少的行并使用该索引来获取行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)