【SQL】01_全表扫描
系列文章
【Oracle】数据库服务器限制ip访问
本文链接:https://blog.csdn.net/youcheng_ge/article/details/122220930
【Oracle】Excel导入数据教程
本文链接:https://blog.csdn.net/youcheng_ge/article/details/118722756
【Oracle】数据库还原教程_数据泵
本文链接:https://blog.csdn.net/youcheng_ge/article/details/118054855
【SQL】如何查询表字段并识别主键
本文链接:https://blog.csdn.net/youcheng_ge/article/details/110820405
【SQL】outer apply的用法
本文链接:https://blog.csdn.net/youcheng_ge/article/details/79903489
【SQL】多表连接重复数据处理
本文链接:https://blog.csdn.net/youcheng_ge/article/details/79903619
MySQL安装教程(详细)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126037520
MySQL卸载教程(详细)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129279265
文章目录
- 系列文章
- 前言
- 一、技术介绍
- 二、数据脚本
- 三、效果展示
- 四、用法总结
前言
本专栏专注数据库原理与SQL实战。从建表、视图、索引等基础架构,到增删改查(CRUD)、触发器、事务处理及安全授权,全方位覆盖后端必备技能。拒绝碎片化学习,系统掌握嵌入式SQL与企业级数据操作。对内容感兴趣?持续关注不迷路,任何疑问欢迎评论或私信探讨!
一、技术介绍
视图的定义:
视图不是真实存在的基本表,而是一个虚拟表
二、数据脚本
创建表:
createtabletab1(c1 number,c2 varchar2(20));createtabletab2(c3 number,c4 varchar2(20));插入数据:
declarebeginforrin1..99999loopbegininsertintotab1values(r,'a');end;endloop;insertintotab1values(100000,'b');commit;end;declarebeginforrin1..100000loopbegininsertintotab2values(r,'c'||to_char(r));end;endloop;commit;end;情况1:查询SQL如下
select*fromtab1 twheret.c1=5000;通过执行计划,我们确认SQL执行了全表扫描,需要建相关索引,减少扫描的数据块。
创建索引:
createindexcjq.idx_tab1_c1oncjq.tab1(c1)onlinecomputestatistics;再次执行SQL:
情况2:查询SQL如下
select*fromtab1 twheret.c2='a';select*fromtab1 twheret.c2='b';是否需要建如下索引?
createindexcjq.idx_tab1_c2oncjq.tab1(c2)onlinecomputestatistics;情况3:查询SQL如下:
select*fromtab1 t1jointab2 t2ont1.c1=t2.c3wheret2.c4='c5000';删除之前创建的索引cjq.idx_tab1_c1:
dropindexcjq.idx_tab1_c1;SQL执行计划如下:
创建where条件索引:(tab2表c4列)
createindexcjq.idx_tab2_c4oncjq.tab2(c4)onlinecomputestatistics;SQL执行计划如下:
创建表关联列的索引:(tab1表c1列,tab2表的c3列)
createindexcjq.idx_tab1_c1oncjq.tab1(c1)onlinecomputestatistics;createindexcjq.idx_tab2_c3oncjq.tab2(c3)onlinecomputestatistics;SQL执行计划如下:
衍生:
表的三种连接方式:
1、 nested loop join
2、 hash join
3、 merge join
merge join SQL:
select *
from tab1 t1
join tab2 t2 on t1.c1 = t2.c3
order by c1
三、效果展示
四、用法总结
使用场景:
nested loop join:两个数据源关联,一个数据源数据量较大,一个较小,使用较小的数据源作为驱动表,驱动表的每一行数据循环到大表中匹配,匹配到即返回;
hash join:两个数据源关联,两个数据源的数据量均较大,循环匹配比较耗时,数据库一般把两个大表缓存到PGA内存中进行hash全表交叉匹配,消耗的资源较多,速度较慢;
merge join:hash join的特殊情况,当两个数据源均较大,且存在连接列的排序时,数据库采用该种连接方式。