Skip to the content.

..

SQL执行过程(步骤)

语法分析

视图转换

将涉及视图的查询语句转换为相应的对基表查询语句

表达式转换

将复杂的 SQL 表达式转换为较简单的等效连接表达式

选择优化器

不同的优化器一般产生不同的“执行计划”

Cost Based Optimizer(CBO)(优先考虑)

Rule Based Optimizer(RBO)(逐渐不支持)

选择连接方式,ORACLE有三种连接方式,对多表连接ORACLE可选择适当的连接方式,有四种关联方式

排序合并连接 (Sort Merge Join(SMJ))

内部链接过程

使用建议
嵌套循环(Nested Loops(NL))
内部连接过程
使用建议
哈希连接(Hash Join)
内部连接过程
使用建议
笛卡尔积(Cartesian product)
内部连接过程
出现原因

选择连接顺序

对多表连接ORACLE选择哪一对表先连接,选择这两表中哪个表做为源数据表

选择数据的搜索路径

根据以上条件选择合适的数据搜索路径,如是选用全表搜索还是利用索引或是其他的方式

运行”执行计划”

数据存取

全表扫描(Full Table Scan)

优势

使用建议

通过ROWID的表存取

索引扫描

步骤

注意点

索引类型

B Tree索引(找资料配合理解)
位图索引
HASH索引(找资料 图文)
反转键索引
函数索引

用于需要对列使用函数操作的情况

用于分区表

索引唯一扫描

唯一索引查找一个数值->返回单个ROWID->获取对应的数据

索引范围扫描(常见场景)

索引全扫描(类似索引快速扫描)

索引快速扫描

索引跳跃式扫描

实践操作

准备工作

查看表格

操作方式

sort

如果row source已经排好序,则排序就不会执行,例如使用full index scan的情况

• SORT UNIQUE occurs if a user specifies a DISTINCT clause or if an operation requires unique values for the next step.

• SORT AGGREGATE does not actually involve a sort. It is used when aggregates are being computed across the whole set of rows.

• SORT GROUP BY is used when aggregates are being computed for different groups in the data. The sort is required to separate the rows into different groups.

• SORT JOIN happens during a sort-merge join if the rows need to be sorted by the join key.

• SORT ORDER BY is required when the statement specifies an ORDER BY that cannot be satisfied by one of the indexes.

filter

用于谓词过滤数据或者连接

view

常见问题

列类型不一致导致不走索引扫描

参考资料