表连接 及SQL的优化

表连接的时候,通过执行计划查看到的表连接内部的逻辑:
表连接有三种内部的连接方式(查询内容的三种方法):
hash join 哈希连接
nested loops nl嵌套连接
merge join 排序归并

什么时候会出现这个hash join?
两个表格列的等值筛选

什么时候会出现NL嵌套连接?

  1. 两个表的列,进行非等值筛选;
  2. A表和B表的数据,相差很大,并且表连接的列都是有索引的,这个时候的等值连接就不会变成hash join,而是会使用nl嵌套连接。

什么时候会出现merge join 排序归并?

两个表的连接,筛选条件不是对列和列进行筛选,而是对列和值进行筛cunc

hints优化器:用来强行改变表格内部运行逻辑的方法
写在select后面,写在列名的前面
/*+ 优化器的内容 */

改变表连接的逻辑:
/* +use_hash(a b) / 强制使用哈希连接
/
+use_merge(a b)/ 强制使用排序归并
/
+use_nl(a b) / 强制使用嵌套连接
改变表格读取的顺序
/
+leading(a b) / a一定要是小表(驱动表),b一定是大表(匹配表)
改变查询表格的方法
/
+ full(a) / 强制全表扫描
/
+ index(表名 索引名) / 强制使用索引
并发的使用
/
+ parallel(8) */ 强制使用并行的资源,来执行这个sql语句

在oracle中怎么去优化查询的sql语句/怎么优化数据库?
1.要先通过执行计划看一下sql语句执行的效率
2.查看表格的数量,如果数据量很大,就先给表格进行分区表的设置
3.给表格建适当的索引
4.检查索引失效的语句
5.使用嵌套去替换部分连接的场景
查询SMITH在哪里上班
联合查询14 4 56行
嵌套查询14 4 18行
6.使用临时表去存储一个或者多个大表筛选的结果,然后使用临时表进行表格的连接
7.or的效率比较低,可以使用union all去进行替换
8. 尽量少使用union minus intersect等集合的运算,这些都是效率很差的关键字
9.使用多线程的并发的优化器去加速执行的速度

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一凡888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值