我可以在Mysql中强制合并索引吗?

时间:2013-04-05 06:26:40

标签: mysql indexing

我有一个类似

的查询
SELECT fld from table
WHERE id > 50000 
AND fld_1 = 0 
LIMIT 1000

id和fld_1都被编入索引。但它总是使用其中任何一个以获得更好的结果?强制索引仅使用其中一个。

我指的是 - http://dev.mysql.com/doc/refman/5.1/en/index-merge-optimization.html#index-merge-intersection

2 个答案:

答案 0 :(得分:3)

我不知道有什么方法可以强制进行索引合并。该手册页上的条件描述了可以完成索引合并的条件,并且优化器应该自动执行(如果可以的话(如果基于成本的优化器决定它值得这样做)。如果不可能,则无法强制进行索引合并。

但是复合索引通常比索引合并更好,所以这将是一个更好的策略。

列的顺序很重要。将相等比较的列放在索引中,然后列不等式比较。

CREATE INDEX idxFld1Id ON `table` (fld_1, id);

另见我的演讲How to Design Indexes, Really


您可以使用http://www.percona.com/doc/percona-toolkit/pt-online-schema-change.html

进行架构更改,例如创建索引 - 无需停机

当然,首先在数据库的测试副本上进行尝试,以了解如何使用该工具。

答案 1 :(得分:0)

通过替换您的索引名称来尝试以下操作 从表使用索引(xxx)中选择fld WHERE id> 50000 AND fld_1 = 0 限制1000