我的表有1,000,000行和4列:
id cont stat message
1 rgrf 0 ttgthyhtg
2 frrgt 0 tthyrt
3 4r44 1 rrttttg
...我正在执行一个select查询,即使我已经建立了索引,它的执行速度也非常慢
SELECT * FROM tablea WHERE stat='0' order by id LIMIT 1这个查询让我的mysql变得非常慢,我用mysql explain检查了一下,发现了这个
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行,但如何减少呢?
发布于 2012-11-23 00:53:44
问题是,在一个查询中,MySQL只能为每个表使用一个索引,在您的例子中,这就是索引stat。因此,ORDER BY是在不使用索引的情况下执行的,这在1M行上非常慢。尝试以下操作:
正如奥利·琼斯上面所说的,奥利·琼斯隐含地使用了正确的索引:SELECT * FROM tablea USE INDEX(PRIMARY) WHERE stat='0' order by id LIMIT 1
发布于 2012-11-23 00:49:13
我建议您尝试在(stat,id)上创建一个复合索引。这可能会优化您的搜索/排序操作。当然,这也有一个缺点:插入和更新会带来额外的开销。
CREATE INDEX ON tablea (stat,id) USING BTREE试试看。
https://stackoverflow.com/questions/13516430
复制相似问题