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值自动分配
列表分区:
列值必须明确指定
一个分区列
复合分区:
先按第一分区方法分区
再按第二分区方法划分子分区
其他分区:
作者:Rick__想太多先森
出处:http://www.cnblogs.com/xtdxs/
注意:本文仅代表个人理解和看法哟!和本人所在公司和团体无任何关系!