SQL优化的方式

2018-08-17 09:39:45来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

1.避免 字段 值为null ,尽量赋予默认值, 整数: 0 , 小数:0 , 字符: ''

null值 无法 加入索引, 查询 null值时 无法 启用索引, 全表扫描

(个别特殊 需求下, 表中仍需要 null值)

2.尽量避免使用 不等于 : != 或 <>

不等 条件 无法 利用索引 进行检索 , 逐行扫表

(某些场景下, 不等条件 可能 无法避免)

3. 尽量避免使用 or 连接条件 , or 导致 扫描全表

替代方案 : union all


(1)union all : 将两个查询结果 联合 成 一个 查询结果集

查询语句1

union all

查询语句2 ;

注意: 两个查询语句 查询的 字段要一致

union all 只是 简单机械地将 两个结果集 合并成一个结果集 , 不会做去重

(2)union : 将两个 查询结果集 合并成 一个 查询结果集, 并去重(!!!!!!!)


(3)intersect : 获取 两个查询结果集的 交集 (union all 相当于并集)

查询语句1

intersect

查询语句2 ;

(4)minus(差集,减集)

查询语句1

minus

查询语句2 ;

第一个查询结果集 减去 第二个查询结果集

注意: 如果 第一个结果集 的内容 完全被 第二个结果集 包含, 则 差集结果 为 空

4. 慎用 in 和 not in , 会导致 全表扫描

如果 in中为连续数值, 可以用 between and 替代

5. 尽量在 where 子句中 少用 函数处理

6. 在业务 能够 满足的情况下, 少用 like 模糊查找 (实际项目中 很难避免 )

7. where 子句中, 尽量 避免 对 字段进行 算术运算 , 可以将字段的算术运算 转换为 条件值的运算 ,或直接 将运算结果写入sql

8. 子查询中, exists 性能高于 in

9. 索引 不要过多, 以免 增加 数据库数据改变时, 频发维护索引目录 造成的 负担

10. select 子句中 不要使用 "*" , 练习测试时可以用

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:6.方法_EJ

下一篇:static的简单理解