我正在执行一个mysql查询,用于从具有530399条记录的表中搜索汽车信息
执行查询需要花费很多时间
SELECT c.* FROM CarInfo as c WHERE (c.Vehicle_Year<='2014') and c.Vehicle_Age_Type='USED' limit 0,15 .
我需要表中的所有字段,所以使用*。
我的桌子有36列。有没有办法优化此查询。
添加索引后,它会快速加载限制,但在尝试使用总计数时需要花费时间
SELECT count(*) as total FROM CarInfo as c WHERE (c.Vehicle_Year<='2014') and c.Vehicle_Dealer_Zip in(85320,85354,85541) and (c.Vehicle_age_type='New' or c.Vehicle_age_type='Used' or c.Vehicle_age_type='Certified Used')
Dealer_Zip可能包含可能值。
提前致谢。
答案 0 :(得分:2)
看起来您的表缺少索引,如果是,则需要先添加它们。
在添加索引之前,首先使用以下命令检查其是否已存在
show indexes from CarInfo
从上面的命令看看Vehicle_Year和Vehicle_Age_Type是否有索引,因为你提到了查询需要优化,我猜你错过了索引。
下一步将索引添加为
alter table CarInfo add index type_year_idx (Vehicle_Age_Type,Vehicle_Year);
注意:在添加索引
之前,您必须备份表然后将查询重新框架为
SELECT c.*
FROM CarInfo as c
WHERE c.Vehicle_Age_Type='USED'
AND c.Vehicle_Year<='2014' limit 0,15 ;
此外,如果您认为查询需要很长时间,则应始终使用EXPLAIN查看此查询的内容,以便您可以计划优化。对于当前查询,语法如下所示。
EXPLAIN
SELECT c.*
FROM CarInfo as c
WHERE
c.Vehicle_Year<='2014'
AND c.Vehicle_Age_Type='USED'
limit 0,15 ;