任务描述

---------------------01.查询常用优化方法---------------------------------
分页查询优化:

1. select … from tb limiit 20000, offset 10
   改为select …from tb where id > 20000 limit 10 保证往聚簇索引上靠

子查询优化:
1. 禁止使用not in,not exists子查询,改用left join … where b.x is null
   改用select ... from a left join b where b.x is null
 
数据类型不匹配优化: 
1.char、int类型不匹配失效:采用了隐式函数,导致索引失效


--------------------------03.索引失效-------------------------------
1.最左匹配原则
where条件中顺序无关,但一定要有联合索引第一个。后面第二个、第三个有没有都行,与之代价就是后面的索引字段无法使用。
2.计算、函数、类型转换导致索引失效
因为索引底层是采用实际字段存储,而函数无法带入到实际存储中,故而必须一个个比较,即全表扫描
char、int类型不匹配失效:采用了隐式函数,导致索引失效。不过实际mybatis中会进行类型强校验,开发中一般不会出现这个问题,不过需要注意一下。
3.范围条件右边索引失效
索引是可以使用范围查询的,也可以使用group, order,但是在联合索引中,采用范围后会使得索引后面字段全失效。解决办法就是把范围查询字段放到索引最后面
4.!=、is not null索引失效:因为需要遍历整个B+树(is null不会导致索引失效)
5.like以%开头会失效,结尾不会。
6.or前后存在非索引的列会导致索引失效:因为非索引列本身就是全表扫描,采用并集更是如此
7.比较数据库字符集编码格式不一样,导致字符转换采用函数导致索引失效,比较数据类型不一样,也会导致索引失效。

历史记录  
  1. 2023-03-24 15:08:11, 由 陈少军 创建。
  2. 2023-04-03 11:22:26, 由 陈少军 编辑。
    修改了 所属迭代,旧值为 "680",新值为 "626"。
    修改了 所属模块,旧值为 "1659",新值为 "0"。
    修改了 截止日期,旧值为 "2023-12-31",新值为 "2023-04-04"。
    修改了 任务描述,区别为:
    001- ---------------------01.查询常用优化方法---------------------------------分页查询优化:1. select … from tb limiit 20000, offset 10 改为select …from tb where id > 20000 limit 10 保证往聚簇索引上靠子查询优化:1. 禁止使用not in,not exists子查询,改用left join … where b.x is null 改用select ... from a left join b where b.x is null数据类型不匹配优化:1.char、int类型不匹配失效:采用了隐式函数,导致索引失效--------------------------03.索引失效-------------------------------1.最左匹配原则where条件中顺序无关,但一定要有联合索引第一个。后面第二个、第三个有没有都行,与之代价就是后面的索引字段无法使用。2.计算、函数、类型转换导致索引失效因为索引底层是采用实际字段存储,而函数无法带入到实际存储中,故而必须一个个比较,即全表扫描char、int类型不匹配失效:采用了隐式函数,导致索引失效。不过实际mybatis中会进行类型强校验,开发中一般不会出现这个问题,不过需要注意一下。3.范围条件右边索引失效索引是可以使用范围查询的,也可以使用group, order,但是在联合索引中,采用范围后会使得索引后面字段全失效。解决办法就是把范围查询字段放到索引最后面4.!=、is not null索引失效:因为需要遍历整个B+树(is null不会导致索引失效)5.like以%开头会失效,结尾不会。6.or前后存在非索引的列会导致索引失效:因为非索引列本身就是全表扫描,采用并集更是如此7.比较数据库字符集编码格式不一样,导致字符转换采用函数导致索引失效,比较数据类型不一样,也会导致索引失效。
    001+ ---------------------01.查询常用优化方法---------------------------------分页查询优化:1. select … from tb limiit 20000, offset 10 改为select …from tb where id > 20000 limit 10 保证往聚簇索引上靠子查询优化:1. 禁止使用not in,not exists子查询,改用left join … where b.x is null 改用select ... from a left join b where b.x is null数据类型不匹配优化:1.char、int类型不匹配失效:采用了隐式函数,导致索引失效--------------------------03.索引失效-------------------------------1.最左匹配原则where条件中顺序无关,但一定要有联合索引第一个。后面第二个、第三个有没有都行,与之代价就是后面的索引字段无法使用。2.计算、函数、类型转换导致索引失效因为索引底层是采用实际字段存储,而函数无法带入到实际存储中,故而必须一个个比较,即全表扫描char、int类型不匹配失效:采用了隐式函数,导致索引失效。不过实际mybatis中会进行类型强校验,开发中一般不会出现这个问题,不过需要注意一下。3.范围条件右边索引失效索引是可以使用范围查询的,也可以使用group, order,但是在联合索引中,采用范围后会使得索引后面字段全失效。解决办法就是把范围查询字段放到索引最后面4.!=、is not null索引失效:因为需要遍历整个B+树(is null不会导致索引失效)5.like以%开头会失效,结尾不会。6.or前后存在非索引的列会导致索引失效:因为非索引列本身就是全表扫描,采用并集更是如此7.比较数据库字符集编码格式不一样,导致字符转换采用函数导致索引失效,比较数据类型不一样,也会导致索引失效。
    001- <p>---------------------01.查询常用优化方法---------------------------------<br />分页查询优化:<br /><br />1. select … from tb limiit 20000, offset 10<br /> 改为select …from tb where id &gt; 20000 limit 10 保证往聚簇索引上靠<br /><br />子查询优化:<br />1. 禁止使用not in,not exists子查询,改用left join … where b.x is null<br /> 改用select ... from a left join b where b.x is null<br /><br />数据类型不匹配优化:<br />1.char、int类型不匹配失效:采用了隐式函数,导致索引失效<br /><br /><br />--------------------------03.索引失效-------------------------------<br />1.最左匹配原则<br />where条件中顺序无关,但一定要有联合索引第一个。后面第二个、第三个有没有都行,与之代价就是后面的索引字段无法使用。<br />2.计算、函数、类型转换导致索引失效<br />因为索引底层是采用实际字段存储,而函数无法带入到实际存储中,故而必须一个个比较,即全表扫描<br />char、int类型不匹配失效:采用了隐式函数,导致索引失效。不过实际mybatis中会进行类型强校验,开发中一般不会出现这个问题,不过需要注意一下。<br />3.范围条件右边索引失效<br />索引是可以使用范围查询的,也可以使用group, order,但是在联合索引中,采用范围后会使得索引后面字段全失效。解决办法就是把范围查询字段放到索引最后面<br />4.!=、is not null索引失效:因为需要遍历整个B+树(is null不会导致索引失效)<br />5.like以%开头会失效,结尾不会。<br />6.or前后存在非索引的列会导致索引失效:因为非索引列本身就是全表扫描,采用并集更是如此<br />7.比较数据库字符集编码格式不一样,导致字符转换采用函数导致索引失效,比较数据类型不一样,也会导致索引失效。<br /></p>
    001+ <p>---------------------01.查询常用优化方法---------------------------------<br />分页查询优化:<br /><br />1. select … from tb limiit 20000, offset 10<br /> 改为select …from tb where id &gt; 20000 limit 10 保证往聚簇索引上靠<br /><br />子查询优化:<br />1. 禁止使用not in,not exists子查询,改用left join … where b.x is null<br /> 改用select ... from a left join b where b.x is null<br /><br />数据类型不匹配优化:<br />1.char、int类型不匹配失效:采用了隐式函数,导致索引失效<br /><br /><br />--------------------------03.索引失效-------------------------------<br />1.最左匹配原则<br />where条件中顺序无关,但一定要有联合索引第一个。后面第二个、第三个有没有都行,与之代价就是后面的索引字段无法使用。<br />2.计算、函数、类型转换导致索引失效<br />因为索引底层是采用实际字段存储,而函数无法带入到实际存储中,故而必须一个个比较,即全表扫描<br />char、int类型不匹配失效:采用了隐式函数,导致索引失效。不过实际mybatis中会进行类型强校验,开发中一般不会出现这个问题,不过需要注意一下。<br />3.范围条件右边索引失效<br />索引是可以使用范围查询的,也可以使用group, order,但是在联合索引中,采用范围后会使得索引后面字段全失效。解决办法就是把范围查询字段放到索引最后面<br />4.!=、is not null索引失效:因为需要遍历整个B+树(is null不会导致索引失效)<br />5.like以%开头会失效,结尾不会。<br />6.or前后存在非索引的列会导致索引失效:因为非索引列本身就是全表扫描,采用并集更是如此<br />7.比较数据库字符集编码格式不一样,导致字符转换采用函数导致索引失效,比较数据类型不一样,也会导致索引失效。</p>
  3. 2023-04-03 11:22:39, 由 陈少军 完成。
    修改了 总计消耗,旧值为 "0",新值为 "1"。
    修改了 实际完成,旧值为 "",新值为 "2023-04-03 11:22:33"。
    修改了 任务状态,旧值为 "wait",新值为 "done"。
    修改了 实际开始,旧值为 "0000-00-00 00:00:00",新值为 "2023-04-03 11:22:39"。
    修改了 由谁完成,旧值为 "",新值为 "chenshaojun"。
  4. 2023-10-31 14:53:15, 由 周杰 关闭。
    修改了 任务状态,旧值为 "done",新值为 "closed"。
    修改了 指派给 ,旧值为 "chenshaojun",新值为 "closed"。
    修改了 由谁关闭,旧值为 "",新值为 "zhoujie"。
    修改了 关闭时间,旧值为 "0000-00-00 00:00:00",新值为 "2023-10-31 14:53:15"。
    修改了 关闭原因,旧值为 "",新值为 "done"。
所属迭代 系统管理部 - 系统服务优化
所属模块 /
相关需求 暂无
指派给 Closed 于 2023-10-31 14:53:15
任务类型 后端
任务标签 初始
开发组 有品开发组
任务状态 已关闭
进度 100%
优先级 P2
关键词
抄送给
由谁创建 陈少军 于 2023-03-24 15:08:11
由谁完成 陈少军 于 2023-04-03 11:22:33
由谁取消 暂无
由谁关闭 周杰 于 2023-10-31 14:53:15
关闭原因 已完成
最后编辑 周杰 于 2023-10-31 14:53:15
团队 最初预计 总计消耗 预计剩余
工时信息
最初预计 0工时
总计消耗 1工时
预计剩余 0工时
预计开始 2023-03-24
实际开始 2023-04-03
截止日期 2023-04-04