码迷,mamicode.com
首页 > 数据库 > 详细

SQL优化的方式

时间:2018-08-16 13:44:04      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:and   sel   使用   内容   union   交集   HERE   全表扫描   整数   

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 子句中 不要使用 "*" , 练习测试时可以用

SQL优化的方式

标签:and   sel   使用   内容   union   交集   HERE   全表扫描   整数   

原文地址:https://www.cnblogs.com/wusen/p/9486472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!