1、sql优化
2、基于sql的优化
1)通过explain查看sql执行计划
explain SELECT * from t_hg a WHERE a.user = '0011' ORDER BY a.datetime DESC;
2)extral列标识
using filesort
说明1: sql为select
说明2: sql中用到where以及order by
说明3: sql中where中字段建立普通索引,order by 建立普通索引
说明4: 出现using filesort是order by对结果进行排序
3)规避using filesort,建立联合索引(组合索引)
create index gdx_user_datetime on t_hg(user, datetime);
说明1: 联合索引将排序前置
说明2: 加入联合索引后,extral标识改为
Backward index scan
即从索引中获取数据
4)结论
说明1: 当
Where
条件和order by
子句作用在不同的列上,建立联合索引可以避免Using filesort
的产生说明2: 通过联合索引去掉
Using filesort
,耗时减少,实际操作并不稳定;但平均时间可能会所提升。说明3: 尽可能规避掉Using filesort
~~
1)创建表或者视图转表
create table t_tmp_total as select * from v_total
说明1: 视图转表,需要重新构建主键与索引
说明2: 场景,接手时业务使用视图维护表,但是视图的索引有问题查询较慢;索引又基于业务表,因为对业务表不熟悉,直接创建索引存在风险;将视图专为表,在新表上开发新的业务,就不用担心之前的业务出问题
2)复制查询
truncate table t_tmp_total
insert into t_tmp_total select * from v_total
说明1: 视图是sql的封装,数据基本是实时的;临时表则需要更新策略,手动更新;创建临时标后定时维护临时表的数据
~~