Mysql 从标记中获取相关行(慢速查询)
我正在使用2表文章标签系统(myisam),根据当前正在查看的文章的标签和类别id获取相关文章的查询速度太慢:Mysql 从标记中获取相关行(慢速查询),mysql,performance,Mysql,Performance,我正在使用2表文章标签系统(myisam),根据当前正在查看的文章的标签和类别id获取相关文章的查询速度太慢: CREATE TABLE `tags` ( `article_id` int(11) NOT NULL DEFAULT '0', `tag` varchar(99) NOT NULL DEFAULT '', PRIMARY KEY (`article_id`,`tag`), KEY `tag_ix` (`tag`) ) ENGINE=MyISAM
CREATE TABLE `tags` (
`article_id` int(11) NOT NULL DEFAULT '0',
`tag` varchar(99) NOT NULL DEFAULT '',
PRIMARY KEY (`article_id`,`tag`),
KEY `tag_ix` (`tag`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `articles` (
`article_id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL DEFAULT '',
`content` text NOT NULL,
`category_id` int(11) NOT NULL,
`tags` varchar(255) NOT NULL DEFAULT '',
`status` tinyint(2) NOT NULL DEFAULT '0',
PRIMARY KEY (`article_id`),
KEY `status` (`status`),
KEY `csd` (`category_id`,`status`,`article_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
根据标记和类别ID查询获取相关文章:
SELECT
ta.tag, ta.article_id, ar.article_title
FROM
tags ta
INNER JOIN tags tb ON ta.tag = tb.tag AND tb.article_id <> ta.article_id
INNER JOIN articles ar ON tb.article_id = ar.article_id
WHERE
ta.article_id = $currentArticleId AND ar.category_id = $currentCategoryId AND ar.status = 1
选择
ta.tag,ta.article\u id,ar.article\u标题
从…起
标签ta
ta.tag=tb.tag和tb.article\u id ta.article\u id上的内部联接标记tb
tb.article\u id=ar.article\u id上的内部联接项目ar
哪里
ta.article\u id=$CurrentArticle id和ar.category\u id=$currentCategoryId和ar.status=1
如果我查找ar.category_id和ar.status,查询速度很快(0.001秒,而不是0.8秒)
有没有办法加快速度
感谢回答我自己的问题,我已经解决了这个问题,在articles表中为category_id添加了索引,并在查询中使用了索引提示:
SELECT
ta.tag, ta.article_id, ar.article_title
FROM
tags ta
INNER JOIN tags tb ON ta.tag = tb.tag AND tb.article_id <> ta.article_id
INNER JOIN articles ar USE INDEX (category_id) ON tb.article_id = ar.article_id
WHERE
ta.article_id = $currentArticleId
AND ar.category_id = $currentCategoryId
AND ar.status = 1
选择
ta.tag,ta.article\u id,ar.article\u标题
从…起
标签ta
ta.tag=tb.tag和tb.article\u id ta.article\u id上的内部联接标记tb
tb.article\u id=ar.article\u id上的内部联接项目ar使用索引(category\u id)
哪里
ta.article\u id=$currentArticleId
和ar.category_id=$currentCategoryId
和ar.status=1
现在在~0.001秒后执行。您能发布两个查询的查询计划吗?我已经更新了问题。