2017-07-17 16 views
0

我有一個InnoDB,MySQL表和該查詢返回零行:爲什麼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 
... 

有上顯示的索引(INT 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 
+0

我們知道DIDELY-SQUAT關於你的桌子設計/系統/等等。所以你希望有一個千里眼通過並回答這個問題 – RiggsFolly

+0

請閱讀[我可以問哪些主題](http://stackoverflow.com/help/on-topic) 和[如何提出一個好問題]( http://stackoverflow.com/help/how-to-ask) 和[完美的問題](http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) 以及如何創建一個[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve) [和參觀](http://stackoverflow.com/tour) – RiggsFolly

+0

我想我真正的問題是,這是正常的嗎?我沒有在線閱讀關於碎片化MySQL表格的信息,說明它們會影響查詢結果。只是它佔用存儲空間...... –

回答

0

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

同時,改變

INDEX(parent_id), 
INDEX(display) 

INDEX(parent_id, display) 

通過結合他們,查詢將運行得更快(希望正確)。標誌上的索引(display)很可能永遠不會使用。

相關問題