Oracle中SQL的执行
SQL语句
- 语法检查
- 检查SQL拼写
- 语义检查
- 检查SQL中国内地访问对象是否存在
- 权限检查
- 看用户是否具备访问该数据的权限
- 共享池检查
- shared pool 内存池
- 库缓存
- 决定SQL语句是否需要进行硬解析
- 如何避免硬解析——绑定变量:在SQL语句中使用变量,通过不同变量取值来改变SQL的执行结果
- 数据字典缓冲区
- 对象定义
- 表,视图,索引等对象
- 对SQL语句进行解析对适合,如果需要相关数据,会从数据字典缓冲区中提取
- 缓存SQL语句和该语句的执行计划
- Oracle通过检查是否存在SQL语句的执行计划,来判断进行软解析还是硬解析
- 执行(软解析)
- 优化器(硬解析)
- 决定怎么做,比如创建解析树,生成执行计划
- 执行
- 执行器
- 基于解析树+执行计划
- 在执行器中执行语句
如何避免硬解析,使用软解析?
oracle 绑定变量
1 | select * from a where a_id = 10001 |
但是动态SQL因为参数不同,SQL的执行效率也不同,给SQL优化带来了困难
MySQL
C/S架构
• 连接层
• SQL层
• 存储引擎层
create database VS create schema
mysql
- CREATE DATABASE creates a database with the given name. To use this statement, you need the CREATE privilege for the database.
- CREATE SCHEMA is a synonym for CREATE DATABASE.
- https://dev.mysql.com/doc/refman/8.0/en/create-database.html
SQL Server