按类别筛选时,Mysql计数很慢

时间:2015-02-11 04:20:31

标签: php mysql

为什么我跑步时查询速度很快。

select count(*) as aggregate from `news` where `news`.`deleted_at` is null and `status` = '1'

但是,当我跑步时,速度很慢。

select count(*) as aggregate from `news` where `news`.`deleted_at` is null and `status` = '1' and `newscategory_id` = '17'

这是我的表格news结构图片,请查看here

很抱歉,因为我的声誉低于8,所以我无法附加图片。

2 个答案:

答案 0 :(得分:0)

尝试在您用于选择的三列上添加复合索引:

ALTER TABLE news ADD INDEX comp_index (deleted_at, status, newscategory_id);

再次检查。 可能使用EXPLAIN来查看是否使用了任何索引。

答案 1 :(得分:0)

  

索引用于快速查找具有特定列值的行。   如果没有索引,MySQL必须从第一行开始然后读取   通过整个表来查找相关的行。越大了   表,这个成本越多。如果表具有列的索引   有问题的是,MySQL可以快速确定要寻求的位置   数据文件的中间,而不必查看所有数据。   这比按顺序读取每一行要快得多。

尝试在您的数据库中添加:

CREATE INDEX newCategory_indx ON news (newscategory_id)
CREATE INDEX status_indx ON news (status)

与先前生成的(非索引列)结果相比,这将为您提供快速结果。

了解有关索引及其重要性的更多信息visit here