gpt4 book ai didi

MySQL 查询速度慢

转载 作者:行者123 更新时间:2023-11-30 01:31:01 25 4
gpt4 key购买 nike

SELECT links.* 
FROM links
INNER JOIN (
SELECT keywords_links.link_id
FROM keywords_links
INNER JOIN keywords ON keywords_links.keyword_id = keywords.id
WHERE keywords.keyword
IN ("facebook", "google", "apple")
GROUP BY keywords_links.link_id
) t
ON links.id = t.link_id

这将返回与关键字匹配的链接。我有 3 个表:linkskeywordskeywords_linkskeywords_links 将关键字与链接链接起来。

如何使该查询更高效?我对 MySQL 缺乏经验,因此必须使用基本的 MySQL 命令来创建此查询。

表格(仅显示相关信息):

链接:

CREATE TABLE IF NOT EXISTS `links` (
`id` int(11) NOT NULL auto_increment,
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=337789 ;

关键字链接:

CREATE TABLE IF NOT EXISTS `keywords_links` (
`keyword_id` int(11) NOT NULL,
`link_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

关键词:

CREATE TABLE IF NOT EXISTS `keywords` (
`id` int(11) NOT NULL auto_increment,
`keyword` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `sort` (`id`,`keyword`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=60363 ;

最佳答案

查询本身没问题。性能问题可能是它必须对 keywords_links 进行全表扫描以匹配关键字,并对关键字进行全表扫描以查找匹配项。

尝试将表结构更改为:

CREATE TABLE IF NOT EXISTS `keywords` (
`id` int(11) NOT NULL auto_increment,
`keyword` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `sort` (`id`,`keyword`),
INDEX (keyword)
) ;

这将加快关键字匹配速度(您也可以使用创建索引)。

下一步,以便您可以更快地找到链接:

CREATE TABLE IF NOT EXISTS `keywords_links` (
`keyword_id` int(11) NOT NULL,
`link_id` int(11) NOT NULL,
unique (keyword_id, link_id)
);

通过索引查找关键字匹配项,然后通过索引查找链接的组合应该可以加快查询速度。

关于MySQL 查询速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17460602/

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