2013-04-05 61 views

回答

0

由表使用索引免去您的索引名 SELECT FLD(xxx) WHERE ID> 50000 和fld_1 = 0 LIMIT 1000

+0

它不工作。我也尝试过力量指数。但只有一个索引将被使用,而不是两个 – georgecj11 2013-04-05 06:50:49

+0

你有没有尝试使用索引(xxx1,xxx2)? – shola 2013-04-05 07:00:50

+0

是的,我做到了。如果我说强制索引(index_1),它永远不会使用index_2。我知道。 – georgecj11 2013-04-05 07:05:58

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

当然首先尝试在你的数据库的测试复印,学习如何使用工具。

+0

感谢您的回复。到目前为止,添加索引对我来说几乎是不可能的,因为它需要几个小时的停机时间。所以我试图利用现有的索引。如果我在(fld1,id)上创建索引,那么选择索引的概率就会更大,因为基数太高,我有点担心它是否会被使用,即使在假设要使用其他索引时也是如此。 – georgecj11 2013-04-17 03:52:22

+0

@BillKarwin,“在线模式更改”的缺点是什么? – Pacerier 2015-02-01 19:42:51

+0

@Pacerier,pt-online-schema-change比使用传统的ALTER TABLE要慢。它要求表具有主键并且没有触发器。否则,它没有太大的缺点。我建议你看作者的网络研讨会,参见[Zero-Downtime Schema Changes in MySQL](http://www.percona.com/webinars/2012-05-02-zero-downtime-schema-changes-in-mysql) ) – 2015-02-03 04:58:41

相关问题