Mysql 从标记中获取相关行(慢速查询)

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

我正在使用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  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秒后执行。

您能发布两个查询的查询计划吗?我已经更新了问题。