http://www.trinea.cn/android/database-performance/
表结构优化
- 减少数据冗余;数据冗余是指相同的数据在多个地方存在
- 使用适当的字段属性
索引优化
- 不适合加索引的
- 查询过程中很少用到
- 只有很少数据值的列
- 定义为image,text,bit数据类型的列
- 当修改性能远大于检查性能(改的多)
查询语句优化(sql执行计划)
- 单表
- 避免select *,只返回需要的字段
- 早过滤
- 避免类型转换
- 分页处理
- 如果需要经常对表中的数据进行统计,可以在表中增加一个统计字段
- 多表
- 使用连接查询代替子查询
- 使用联合查询代替手动创建的临时表
- 尽量少使用视图,特别是嵌套视图,可以直接从表中获取数据。
- 索引
- 避免在索引列上使用IS NULL和IS NOT NULL
- 避免在索引列上使用计算
- 不要在where语句中=的左侧使用函数或表达式,无法使用到索引 ;
- 使用like关键字的时候需要注意通配符的使用方法,LIKE ‘4YE%’使用索引,但LIKE ‘%YE’不使用索引;
- 避免改变索引列的类型
- ’!=’ 将不使用索引;
- 关键字
- Distinct:慎用Distinct关键字
- order by:如果不要排序,尽量不要使用order by语句,这也会增加开销 ;
- where:在过滤条件中,可以过滤掉最大数量记录的条件必须放在where子句的末尾;
- exists,count:当判断表中是否包含记录时,使用EXISTS关键字,而不要使用count统计表中所有的记录数数量
- or/in/exists/between:在WHERE中尽量不要使用OR,用IN来替代OR,用EXISTS替代IN、用NOT EXISTS替代NOT IN;使用BETWEEN关键字比IN要快,因为IN关键字对其后面的集合中的每一个元素都进行比较,如果必须使用IN关键字,则可以将频繁使用的值放在集合的前面,从而减少比较的次数 ;
- union all / union/or:用union all / union 代替 or,用union all (不排重)代替 union
- GROUP BY:优化GROUP BY
- 数据量
- 如果需要多次对一个数据量非常大的表中的一部分数据进行查询操作,可以将这部分数据保存到临时表中,然后对临时表进行查询操作,并且可以根据需要在临时表中增加索引 ;
执行计划:
https://blog.csdn.net/heng_yan/article/details/78324176
https://www.cnblogs.com/zping/p/5368860.html
https://www.jianshu.com/p/19b4b1a78995
https://blog.csdn.net/wuseyukui/article/details/71512793
https://blog.csdn.net/qq_30002351/article/details/82491137
https://yq.aliyun.com/articles/602513
https://www.cnblogs.com/xinysu/p/7860609.html
https://www.cnblogs.com/songwenjie/p/9409852.html