Oracle

Oracle

执行计划

使用 EXPLAIN PLAN 得到 SQL 语句的执行计划:

EXPLAIN PLAN FOR SELECT * FROM emp WHERE deptno = 10 ORDER BY ename;
SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));
-- 或者
SELECT * from table(dbms_xplan.display);

Oracle 执行计划显示的是一个树形结构,其阐述了 SQL 引擎执行操作的顺序,树的每一个节点代表一个操作:表访问、连接或排序等,各个操作之间存在父子关系。

Operation 解释 SQL
TABLE ACCESS FULL 全表扫描
PARTITION RANGE SINGLE 单个分区扫描 SELECT * FROM t WHERE n1 = 3 AND d1 = to_date('2007-07-19', 'yyyy-mm-dd')
PARTITION RANGE ITERATOR 多个分区扫描 SELECT * FROM t WHERE n1 = 3 AND d1 < to_date('2007-07-19', 'yyyy-mm-dd')
PARTITION RANGE INLIST 存在 IN 的多个分区扫描 SELECT * FROM t WHERE n1 IN (1, 3) AND d1 = to_date('2007-07-19', 'yyyy-mm-dd')
PARTITION RANGE ALL 所有分区扫描 SELECT * FROM t WHERE n1 BETWEEN 6000 AND 7000
PARTITION RANGE OR OR 条件分区扫描 SELECT * FROM t WHERE n1 = 3 OR d1 = to_date('2007-07-19', 'yyyy-mm-dd')
INDEX FULL SCAN 全索引扫描
INDEX FAST FULL SCAN 快速全索引扫描
TABLE ACCESS BY USER ROWID 直接指定 ROWID SELECT * FROM emp WHERE rowid IN ('ASDJOWF', 'ADSOFJO')
TABLE ACCESS BY INDEX ROWID
INDEX UNIQUE SCAN 用上了唯一索引
INDEX RANGE SCAN 用上了非唯一索引

Oracle vs MySQL

Oracle MySQL
事务默认隔离级别 read commited repeatable read
价格 ORACLE 11g 标准版售价在六位数 开源免费
AUTO_INCREMENT 不可以声明,主键自带自增长 可以声明
索引 Oracle 的索引是数据库级别,不可以同名 MySQL 的索引是表级别的,可以同名
数字类型 NUMBER INT/DECIMAL
分页 Oracle 是需要用到伪列 ROWNUM 和嵌套查询 LIMIT X, Y
默认端口 1521 3306

参考