MySQL查询优化
系统运行时间久了,会发现随着数据越来越多,查询越来越慢了
MySQL通过各种配置可以优化,当配置优化不好或不太懂各种配置的时候,用本文的方法相信会有所帮助。
【临时表优化】
MySQL对临时表支持很好,对于一些逻辑清晰的查询,如果发现存在以下情况,可以考虑用临时表优化:
1. Join超过5个,且Join的逻辑比较复杂,比如Join的聚合查询
2. 明确的数据分割,比如查询的数据明确按公司分割
优化方法很简单,创建临时表并用临时表进行再次查询,比如:
Select xxx
From Table1
Inner Join (Select xxx Table2 Group By xxx) On xxx
Inner Join Table3 On xxx
Inner Join Table4 On xxx
改成使用临时表查询
Create Temporary Table T_Table1 as Select xxx From Table1 Where XXX;
Create Temporary Table T_Table2 as Select xxx From Table2, Table 3 Where XXX;
Select XXX
From T_Table1
Inner Join T_Table2 On xxx
Inner Join Table4 On xxx
改变之后,查询速度可能会有指数级的提升。
不过也有个 缺点,CPU会提升不少。
【预处理方式】
对于一些实时要求不是很高,统计类的复杂查询来说,用预处理会特别有用,比如:
Select
子查询1 BI1,
子查询2 BI2,
子查询3 BI3
From Table1
可以创建一个预处理表进行优化,比如 BI_Table1包含BI1,BI2,BI3 三个字段
Insert BI_Table1(Key,BI1,BI2,BI3) As
Select Key,子查询1,子查询2,子查询3 From Table1;
Select BI1,BI2,BI3
From Table1
Left Join BI_Table1
这种方式通常用于BI数据处理,设置一个定时任务执行预处理。
在项目实践中,从30秒才能查询出来,提升到了0.5秒!