gpt4 book ai didi

mysql - 为 Tatoeba 项目优化 MySQL 查询

转载 作者:行者123 更新时间:2023-11-29 02:05:49 24 4
gpt4 key购买 nike

我已经下载了 Tatoeba project databases我正在尝试查询它们,但使用子查询的查询花费的时间太长。

-- 800.000 rows approx.
CREATE TABLE `sentences` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`language` char(3) DEFAULT NULL,
`text` mediumtext,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=912551 DEFAULT CHARSET=utf8


-- 1.5 million rows approx.
CREATE TABLE `links` (
`sentenceId` int(10) unsigned NOT NULL,
`translatedId` int(10) unsigned NOT NULL,
PRIMARY KEY (`sentenceId`,`translatedId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

链接表基本上将 sentences 表中的两个句子连接在一起(原始句子和一个翻译)。一个句子可以有零个或多个翻译。所以我有一个句子的 ID,我想使用它并想获取所有可用的翻译。

这个查询得到了我想要的,但需要将近 18 秒才能完成。

SELECT * FROM `sentences` WHERE `id` IN (SELECT `translatedId` FROM `links` WHERE `sentenceId` = 157967);

单独运行这两个查询只需片刻。

我做错了什么?

最佳答案

SELECT `sentences`.* FROM 
`sentences` JOIN
`links` ON `id` = `translatedId`
WHERE `sentenceId` = 157967;

已知某些版本的 MySQL 不在子查询中使用索引。

关于mysql - 为 Tatoeba 项目优化 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6208502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com