如何调试无法在Navicat,Workbench中加载的表?

时间:2014-08-22 18:51:35

标签: mysql myisam

我有一张不会在Navicat中加载的表格。我开始认为这是桌子上的一个严重问题 - 我之前从未遇到过这样的事情。它只是在执行加载1000行的初始SELECT时停止。表是MyISAM,总行数约为64k。

有关如何调试的建议吗?数据库中的其他表似乎加载正常。

更多细节:我注意到可能是罪魁祸首的事情。对于此查询:

SELECT * FROM data_warehouse AS dw 
LEFT JOIN serialized AS dws ON dw.dw_id = dws.dw_id 
WHERE (dw.ds_id = 2) ORDER BY dw.dw_id DESC LIMIT 1

当发生这种情况时,我会show processlist,我看到有一个条目表示"正在复制到tmp表"。它并没有消失,而是留在那里。命令类型为' QUERY'。

另外,我注意到数据类型之间存在不一致。我的data_warehouse表格dw_idbigint,而serialized的dw_id为int。我应该更改serialized的dw_id以匹配吗?如果我这样做会有什么破坏吗?

1 个答案:

答案 0 :(得分:0)

这已经解决了 - 基本上发生了什么:

在服务器中还有其他查询使我的查询在队列中没有进行处理/停止。发生了两个表之间的LEFT JOIN,并且这两个表的数据类型dw_id不一致。一个是bigint,另一个是int。这导致两个查询尝试复制到tmp表"然后让每一个查询都停止。

我通过执行show processlist调试了它并执行了kill QUERYID。需要使用不一致的dw_id数据类型将索引添加到第二个表中。