MySQL优化计数查询
我有一个关于MySQL性能的问题。 这些是我的桌子: (约140000条记录) (约40万条记录) 运行此计数查询:MySQL优化计数查询,mysql,optimization,join,count,Mysql,Optimization,Join,Count,我有一个关于MySQL性能的问题。 这些是我的桌子: (约140000条记录) (约40万条记录) 运行此计数查询: SELECT SQL_NO_CACHE COUNT(id) as total FROM (`article`) LEFT JOIN `article_category` ON `article_category`.`article_id` = `article`.`id` WHERE `article`.`language_id` = 1 AND `article_cat
SELECT SQL_NO_CACHE COUNT(id) as total
FROM (`article`)
LEFT JOIN `article_category` ON `article_category`.`article_id` = `article`.`id`
WHERE `article`.`language_id` = 1
AND `article_category`.`category_id` = '<catid>'
在添加索引并将LEFT JOIN更改为JOIN之后,查询运行得更快!
感谢您的快速回复:)
我现在使用的查询(我删除了语言id,因为它不是必需的):
选择计数(id)作为总数
FROM(`article`)
加入'article'u category'上的'article'u category'。'article'u id`='article`.'id`
和'article\u category'。'category\u id`='
我读过一些关于强制索引的内容,但我认为这不再必要了,因为表已经被索引了,对吗
非常感谢
Martijn连接条件中使用的列应该有一个索引,因此您需要索引
文章id
您尚未在表上创建必要的索引
表article\u category
-在(article\u id,category\u id)
表文章
-在(id,language\u id)
如果这对发布解释语句没有帮助。显示解释结果,在
文章\u类别上添加索引。文章\u id
。要么你不应该做左连接
,要么你需要在on
子句中测试类别\u id=
。否则,您将筛选出文章\u类别中不匹配的文章。
。您是否尝试过创建我提到的其他索引。。。这有什么区别吗?试着在语言id上创建一个简单的索引
CREATE TABLE IF NOT EXISTS `article_category` (
`article_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
SELECT SQL_NO_CACHE COUNT(id) as total
FROM (`article`)
LEFT JOIN `article_category` ON `article_category`.`article_id` = `article`.`id`
WHERE `article`.`language_id` = 1
AND `article_category`.`category_id` = '<catid>'
ALTER TABLE `article_category` ADD INDEX ( `article_id` , `category_id` ) ;
SELECT COUNT(id) as total
FROM (`article`)
JOIN `article_category` ON `article_category`.`article_id` = `article`.`id`
AND `article_category`.`category_id` = '<catid>'