20170623_oracle_优化与体系结构
一般优化技巧
建议不用"*"代替所有列名
删除所有数据用TRUNCATE代替DELETE
用NOT EXISTS 代替NOT IN
用EXISTS代替IN
用EXISTS代替DISTINCT
表连接方法
驱动表的选择
WHERE子句的连接顺序
表连接关系放在前面
过滤越多的条件子句应放置到后面
索引
索引分类
B树索引
语法:CREATE [UNIQUE]INDEX index_name ON tablename (column_list)
[TABLESPACE tablespace_name];
其他索引:
唯一索引
反向键索引
位图索引
组合索引
函数索引
索引原则:
创建索引原则:
频繁索引的列
经常排序、分组的列
经常连接的列
指定单独的表空间
不适合建立索引原则
数据量小
仅包含几个不同值的列
数据表操作特别频繁、业务性能要求高
管理索引
索引使用原则:
表中导入数据后再创建索引。否则每次表中插入数据时必须更新索引。
在适当的表和字段上创建索引。如果经常检索的数据少于表中的15%则需要创建索引。
限制表中索引的数目。索引越多,在修改表时对索引做出修改的工作量越大。
索引常见错误用法:
LIKE
函数
运算
表分区
把表中数据划分称若干部分,并存储在不同的位置
优点:
改善查询性能
表更容易管理
便于备份和恢复
提高数据安全性
表分区分类
范围分区:
列值的范围作为划分条件
散列分区:
列的hash值自动分配
列表分区:
列值必须明确指定
一个分区列
复合分区:
先按第一分区方法分区
再按第二分区方法划分子分区
其他分区
小结:
一般SQL优化有哪些手段?
建议不用"*"代替所有列名
删除所有数据用TRUNCATE代替DELETE
用NOT EXISTS 代替NOT IN
用EXISTS代替IN
用EXISTS代替DISTINCT
索引起到什么作用?索引有哪些分类?
逻辑分类:
单列或组合索引
唯一或非唯一索引
基于函数索引
物理分类:
分区或非分区索引
B树索引
正常或反向键索引
位图索引
表分区使用情况?表分区有哪些分类?
表分区:
把表中数据划分称若干部分,并存储再不同的位置
优点:
改善查询性能
表更容易管理
便于备份和恢复
提高数据安全性
表分区分类:
范围分区:
列值的范围作为划分条件
散列分区:
列的hash值自动分配
列表分区:
列值必须明确指定
一个分区列
复合分区:
先按第一分区方法分区
再按第二分区方法划分子分区
其他分区:
- Oracle中优化SQL的原则
- Oracle8i基于规则的优化机制对表达式的处理
- Oracle sql 性能优化调整
- [ORACLE] SQL语句的优化方法
- oracle优化程序模式
- oracle 优化/诊断命令
- ORACLE SQL语句优化技术分析
- Oracle sql 性能优化调整
- oracle 体系结构学习笔记 --20050822 我的第一次blog
- 说一说Oracle的优化器(Optimizer)
- Oracle临时表 优化查询速度
- oracle性能优化
- SQL语句优化技术分析(Oracle)
- Oracle临时表 优化查询速度
- oracle :性能优化的一个案例
- 优化Oracle停机时间及数据库恢复
- oracle 优化方法
- ORACLE SQL语句优化技术分析
- Oracle Pl/Sql 性能优化
- 我的oracle笔记五(oracle优化方面)