0

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

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真的不能做这样的查询?

4

1 回答 1

1

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

也许这可能会更好:

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

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

于 2012-11-12T01:15:34.817 回答