首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql索引问题

mysql索引问题
EN

Stack Overflow用户
提问于 2012-11-23 00:04:39
回答 2查看 1.3K关注 0票数 1

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

代码语言:javascript
运行
复制
id  cont    stat   message

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

我正在执行一个select查询,即使我已经建立了索引,它的执行速度也非常慢

代码语言:javascript
运行
复制
  SELECT * FROM tablea WHERE stat='0' order by id LIMIT 1

这个查询让我的mysql变得非常慢,我用mysql explain检查了一下,发现了这个

代码语言:javascript
运行
复制
  explain SELECT * FROM tablea WHERE stat='0' order by id LIMIT 1

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

代码语言:javascript
运行
复制
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行,但如何减少呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

  • Create a
票数 0
EN

Stack Overflow用户

发布于 2012-11-23 00:49:13

我建议您尝试在(stat,id)上创建一个复合索引。这可能会优化您的搜索/排序操作。当然,这也有一个缺点:插入和更新会带来额外的开销。

代码语言:javascript
运行
复制
CREATE INDEX ON tablea (stat,id) USING BTREE

试试看。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13516430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档