我的表有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但是如何?
答案 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上面所说的那样。