首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MySQL查询返回零行,但在碎片整理后它可以正常工作?

问为什么MySQL查询返回零行,但在碎片整理后它可以正常工作?
EN

Stack Overflow用户
提问于 2017-07-17 22:24:10
回答 1查看 70关注 0票数 0

我有一个InnoDB,MySQL表,这个查询返回零行:

代码语言:javascript
复制
SELECT id, display FROM ra_table WHERE parent_id=7266 AND display=1;

但是,实际上有17行应该匹配:

代码语言:javascript
复制
SELECT id, display FROM ra_itable1 WHERE parent_id=7266;

ID    display
------------------
1748  1
5645  1
...

显示器上有一个索引(Int1),ID是主键。该表还有其他几个字段,我没有在此查询中提取这些字段。

在注意到这个查询不起作用后,我对表进行了碎片整理,然后第一个查询开始正常工作,但只有一段时间。似乎几天后,查询再次停止工作,我必须对其进行碎片整理来修复它。

我的问题是,为什么碎片化的表会破坏这个查询?

更多信息:亚马逊RDS上的MySQL 5.6.27。

代码语言:javascript
复制
CREATE TABLE `ra_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(6) NOT NULL,
`display` int(1) NOT NULL,
PRIMARY KEY (`id`),
KEY `parent_id` (`parent_id`),
KEY `display` (`display`),
) ENGINE=InnoDB AUTO_INCREMENT=13302 DEFAULT CHARSET=latin1 
ROW_FORMAT=DYNAMIC
EN

回答 1

Stack Overflow用户

发布于 2017-07-18 02:35:00

您正在运行的版本中可能存在错误。

同时,改变

代码语言:javascript
复制
INDEX(parent_id),
INDEX(display)

至

代码语言:javascript
复制
INDEX(parent_id, display)

通过将它们组合在一起,查询将运行得更快(希望是正确的)。标志上的索引(display)可能永远不会被使用。

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

https://stackoverflow.com/questions/45146814

复制
相关文章

相似问题

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