SQL语句优化学习

SQL语句优化学习

  • 跳跃索引
        • 1)场景引入:
        • 2)跳跃索引其实就是 MySQL 8.0 推出的适合联合索引左边列唯一值较少的情况的一种优化策略
        • 3)参考文章: [https://www.cnblogs.com/lynn919/p/10875121.html](https://www.cnblogs.com/lynn919/p/10875121.html).
  • 使用绑定变量
        • 1}认识绑定变量:高频使用的SQL语句,使用绑定变量可以编译次数,即使用绑定变量可以减少数据库解析SQL语句的次数,使其只需编译一次。
        • 2)使用:
  • 避免隐式转换
  • union all的使用
  • with as优化子查询
  • oracle优化之index full scan

跳跃索引

1)场景引入:

表t1有一个联合索引idx_u1(rank1,rank2), 但是查询的时候却没有rank1这列,只有rank2。
比如,select * from t1 where rank2 = 30.那以前遇到这样的情况,如果没有针对rank2这列单独建立普通索引,这条SQL怎么着都是走的FULL TABLE SCAN。ISS(跳跃索引)就是在这样的场景下产生的。ISS 可以在查询过滤组合索引不包括最左列的情况下,走索引扫描,而不必要单独建立额外的索引。因为毕竟额外的索引对写开销很大,能省则省。

2)跳跃索引其实就是 MySQL 8.0 推出的适合联合索引左边列唯一值较少的情况的一种优化策略

3)参考文章: https://www.cnblogs.com/lynn919/p/10875121.html.

使用绑定变量

1}认识绑定变量:高频使用的SQL语句,使用绑定变量可以编译次数,即使用绑定变量可以减少数据库解析SQL语句的次数,使其只需编译一次。

2)使用:

未绑定变量的语句:
select name,age from ccc where applyNo=#{applyNo};
使用绑定变量:

 @SelectProvider(type = DrawApplyMapperSql.class(类名),method="selcetLoanList")
 public List selectLoanList(@param("applyNo")String applyNo);
 class DrawMapperSql{
 	public String selectLoanList(@param("applyNo")String applyNo){//方法名保持一致
 		return new SQL({
 		SELECT("name ");
 		SELECT("age");
 		FROM("ph_cf_draw_apply_info");
 		WHERE("apply_no = #{applyNo}");
 		WHERE("loan_status = '"+LoanStatusEnum.SUCCESS.getValue+"'");//增加查询状态
 		}).toString

避免隐式转换

链接: SQL的隐式转换文章.

update text set age=to_number('19')   //显式转换

union all的使用

SQL语句优化学习_第1张图片
union all的效率要高于union,因为union all不会将两张表格相同的数据去重,而union会将两张表格相同的数据去重。
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

with as优化子查询

1.with as的用法介绍

普通的嵌套查询

select * from person.StateProvince where CountryRegionCode in 
(select CountryRegionCode from person.CountryRegion where Name like 'C%')

使用with as优化子查询

with
cr as
(
    select CountryRegionCode from person.CountryRegion where Name like 'C%'
)


select * from person.StateProvince where CountryRegionCode in (select * from cr)

with as的使用解释

oracle优化之index full scan

  SELECT * FROM T_EMPLOYEE WHERE MIDDLE_NAME IS NULL;

当MIDDLE_NAME字段可以为NULL,且具有非唯一索引,ORACLE在执行此语句时,
可能会采用INDEX FULL SCAN操作。
索引全扫描规则

你可能感兴趣的:(SQL)