这真是一个如此复杂的查询还是服务器很慢?

时间:2012-11-12 01:09:18

标签: mysql

最近在这些表中插入了很多行,现在查询超时了:

SELECT * FROM eng
WHERE english IN (SELECT eng FROM `eng-jap`)
ORDER BY lastmodified DESC

表eng-jap有大约25,000行,这里有一些统计数据:

Format          dynamic
Collation       utf8_general_ci
Rows            24,960
Row length ø    316
Row size ø      328 B
Next Autoindex  26,468
Type    Usage
Data    7,724.0 KiB
Index   264.0 KiB
Total   7,988.0 KiB

和表格eng:

Format          dynamic
Collation       utf8_general_ci
Rows            23,691
Row length ø    105
Row size ø      117 B
Next Autoindex  24,771
Type    Usage
Data    2,451.4 KiB
Index   260.0 KiB
Total   2,711.4 KiB

只需从表格中选择*获取(查询花费0.0002秒)以获取任何一个表

我只是不能相信这样一个非常简单的子查询,每个表中有几个k需要超过我设置的160秒超时,然后超时......

我希望它就像我的桌子中的一个设置导致它。或者mysql真的不能这样做一个查询?

1 个答案:

答案 0 :(得分:1)

它必须交叉引用一个表中的所有元素与另一个表的所有元素。

也许这可能会更好:

SELECT `eng`.* FROM `eng`
JOIN `eng-jap` ON `eng`.`english` = `eng-jap`.`eng`
ORDER BY `eng`.`lastmodified` DESC

还要确保定义了合适的索引。这有助于加快查询速度。