mysql索引问题

时间:2012-11-22 16:04:39

标签: mysql

我的表有1,000,000行和4列:

id  cont    stat   message

1   rgrf       0   ttgthyhtg
2   frrgt      0   tthyrt
3   4r44       1   rrttttg
...

我正在执行一个非常慢的选择查询,即使我已完成索引

  SELECT * FROM tablea WHERE stat='0' order by id LIMIT 1

这个查询使我的mysql非常慢,我用mysql解释并找到了这个

  explain SELECT * FROM tablea WHERE stat='0' order by id LIMIT 1

我对输出感到震惊,但我不知道如何优化它。

id  select_type  table   type  possible_keys  key  key_len  ref      rows  Extra
 1  SIMPLE       tablea  ref   stat           stat       4  const  216404  Using where

有216,404行用于优化,我必须减少到1或2但是如何?

2 个答案:

答案 0 :(得分:0)

我建议您尝试在(stat,id)上创建复合索引。这可能允许您的搜索/订单操作进行优化。当然有一个缺点:你会因插入和更新而产生额外的开销。

CREATE INDEX ON tablea (stat,id) USING BTREE

试一试。

答案 1 :(得分:0)

问题是MySQL在查询中每个表只能使用一个索引,在你的情况下这是索引stat。因此,ORDER BY在不使用索引的情况下执行,索引在1M行上非常慢。 请尝试以下方法:

  • 隐式使用正确的索引: SELECT * FROM tablea USE INDEX(PRIMARY) WHERE stat='0' order by id LIMIT 1

  • 创建一个复合索引,就像Ollie Jones上面所说的那样。