为什么我跑步时查询速度很快。
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,所以我无法附加图片。
答案 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