簡體   English   中英

為什么MySQL查詢返回零行,但是在進行碎片整理后仍然有效?

[英]Why does MySQL query return zero rows, but after defrag it works?

我有一個InnoDB,MySQL表,此查詢返回零行:

SELECT id, display FROM ra_table WHERE parent_id=7266 AND display=1;

但是,實際上有17行應該匹配:

SELECT id, display FROM ra_itable1 WHERE parent_id=7266;

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

顯示屏上有一個索引(整數1),ID是主鍵。 該表還具有其他幾個字段,我不在此查詢中提取。

注意到此查詢無法正常工作后,我對表進行了碎片整理,然后第一個查詢開始正常工作,但只持續了一段時間。 幾天后,查詢似乎再次停止工作,我必須進行碎片整理才能修復它。

我的問題是,為什么碎片表會中斷此查詢?

附加信息:Amazon RDS上的MySQL 5.6.27。

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

您正在運行的版本中可能存在錯誤。

同時,改變

INDEX(parent_id),
INDEX(display)

INDEX(parent_id, display)

通過組合它們,查詢將運行得更快(並有望正確運行)。 標志( display )上的索引可能永遠不會使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM