一.索引科普
主键索引
唯一索引
普通索引
单列索引
多列索引
聚簇索引
非聚簇索引
前缀索引
全文索引
二.优化的指标
1.响应事件
2.扫描行数
3.返回行数
explian所关心的参数如下:
type:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL,除了all之外,其他的type都可以使用到索引
key:所用到的所以
rows: 扫描行数
三.查询优化策略
匹配索引查询优化
1.匹配主键,匹配唯一索引.索引的选择性越高,查询效率越高, 扫描的行数越少
2.避免NULL值查询
避免like查询进行全表扫描
避免在where语句中对索引进行复杂计算; where id + 1 = 2;
4.group by, distinct, order by, 关联查询on条件都要考虑匹配索引
查询语句策略优化
1.切分查询;
切分大数据量的in查询; 或者将in查询替换为exist语句; 用between代替in
分解or查询为union查询
2.分解关联查询
3.关联查询时,分析sql的执行计划, 在连表之前进行数据过滤
具体的业务场景下, 达到业务目的sql会有不同的实现策略(join连表查询,子查询,联合查询), 实地的分析和选择最优的sql;
禁用select *
使用select count(*) 统计行数
尽量少运算
尽量避免全表扫描,如果可以,在过滤列建立索引
尽量避免在where子句对字段进行null判断
尽量避免在where子句使用!= 或者<>
尽量避免在where子句使用or连接
尽量避免对字段进行表达式计算
尽量避免对字段进行函数操作
尽量避免使用不是复合索引的前缀列进行过滤连接
尽量少排序,如果可以,建立索引
尽量少join
尽量用join代替子查询
尽量避免在where子句中使用in,not in或者having,使用exists,not exists代替
尽量避免两端模糊匹配 like %***%
尽量用union all代替union
尽量早过滤避免类型转换
尽量批量insert优先优化高并发sql,而不是频率低的大sql
尽可能对每一条sql进行explain尽可能从全局出发
网友评论