gpt4 book ai didi

mysql - 如何在 MySQL/MariaDB 中加入两个大表?

转载 作者:行者123 更新时间:2023-12-04 08:59:14 25 4
gpt4 key购买 nike

我有两张 table kw有 250000 条记录和 t_n有 100000 条记录。
我加入了两个表以在以下查询中获得集体结果:

SELECT kw.id AS kw_id,
kw.word AS kw_word,
t_n.translation AS t_n_translation
FROM kw, t_n
WHERE kw.id = t_n.keyword_id
AND kw.word LIKE '1%'
GROUP BY t_n.translation
LIMIT 10
我还尝试将简单连接作为上述查询的替代:
SELECT kw.id AS kw_id,
kw.word AS kw_word,
t_n.translation AS t_n_translation
FROM kw
INNER JOIN t_n
ON kw.id = t_n.keyword_id
AND kw.word LIKE '1%'
GROUP BY t_n.translation
LIMIT 10
但是这两个查询都需要大约 60 到 150 秒,具体取决于内存和处理的系统资源。
这种执行超时对于扩展数据库和增加多个用户来说是无法忍受的。
有什么有效的方法可以连接两个大表吗?
更新
此查询用于 JQuery UI 自动完成。我使用 GROUP BY 子句来获得不同的值。是否有任何其他合适的解决方案来获得不同的值。
表格结构
--
-- Table structure for table `kw`
--

CREATE TABLE `kw` (
`id` int(32) NOT NULL,
`word` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`pos` varchar(12) NOT NULL,
`definition` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table `t_n`
--

CREATE TABLE `t_n` (
`id` int(16) NOT NULL,
`keyword_id` int(16) NOT NULL,
`translation` varchar(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`created_on` datetime NOT NULL,
`user_id` varchar(64) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `kw`
--
ALTER TABLE `kw`
ADD PRIMARY KEY (`id`);

--
-- Indexes for table `t_n`
--
ALTER TABLE `t_n`
ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `kw`
--
ALTER TABLE `kw`
MODIFY `id` int(32) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `t_n`
--
ALTER TABLE `t_n`
MODIFY `id` int(16) NOT NULL AUTO_INCREMENT;
COMMIT;

最佳答案

我猜你想要:

SELECT kw.id as kw_id, kw.word as kw_word, t_n.translation as t_n_translation
FROM kw INNER JOIN
t_n
ON kw.id = t_n.keyword_id AND kw.word LIKE '1%' ;
对于此查询,您需要 kw(word, id) 上的索引和 t_n(keyword_id) :
create index idx_kw_word_id on kw(word, id);
create index idx_t_n_keyword_id on t_n(keyword_id);

关于mysql - 如何在 MySQL/MariaDB 中加入两个大表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63629290/

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