Orcale 性能优化之索引使用
来源:互联网 发布:蓝牙鼠标推荐 知乎 编辑:程序博客网 时间:2024/05/22 14:26
1.索引必须合理创建,过多的创建索引会增加增删改的负担。
2.有空值的字段尽量不要建索引。
3.尽可能建立唯一的索引。
4.常用的字段组合可以建立复合索引。
5.不要在索引列使用以下操作,否则索引会失效。
a.not、<>
b. is null ,isnot null
c.like,like比较特殊,当使用 like '%xx%'时,索引会失效;左模糊和右模糊索引都可以用,当然,右模糊时需要建立对应的倒索引。
比如:ZTE_FBP_EMPLOYEES_N3是表ztenet.zte_fbp_employees的在employee_number列上的索引
———————————不走N3索引————————————————————
Not:
SELECTt.employee_id
FROM ztenet.zte_fbp_employees t
WHERE t.employee_numbernot in('000');
Is not null:
SELECTt.employee_id
FROM ztenet.zte_fbp_employees t
WHERE t.employee_numberis not null;
Is null:
SELECTt.employee_id
FROM ztenet.zte_fbp_employees t
WHERE t.employee_numberis null;
Like:
SELECTt.employee_id
FROM ztenet.zte_fbp_employees t
WHERE t.employee_number like '%001%';
SELECTt.employee_id
FROM ztenet.zte_fbp_employees t
WHERE t.employee_number like '%001';
——————————走N3索引————————————————————
Is not null:
SELECTt.employee_id
FROM ztenet.zte_fbp_employees t
WHERE t.employee_number>'';
Like:
SELECTt.employee_id
FROM ztenet.zte_fbp_employees t
WHERE t.employee_number like '001%';
//创建一个反的索引,然后左like
CREATE INDEXUSER_INFO_IDX ON USER_INFO(UPPER(REVERSE(FULL_ID)));
SELECTt.employee_id
FROM ztenet.zte_fbp_employees t
WHERE t.employee_number like '%001';
6.不要在索引列执行计算、类型转换,否则索引会失效,反之,有时我们会故意让索引失效,这时我们就可以通过在索引列计算、类型转换等等方式来实现。
比如:bill_code是表zte_ets_air_bills的索引
——————————不走N1索引————————————————————
//通过计算,取消不需要的索引
SELECT*
FROM zte_ets_air_bills t
WHERE t.bill_code||'' = '000'
AND t.bill_id = 1
//转换让其不走索引
SELECT*
FROM zte_ets_air_bills t
WHERENVL(t.bill_code,'N') = '000'
AND t.bill_id = 1
注意:列和对应值的类型一定要写对,否则可能导致不走索引
此时走的是列名determiner 的索引N2,因为N2是varchar
SELECT*
FROM ztefbp.zte_fbp_pos_stru_elements el
WHERE 1 = 1
AND el.determiner = '0'
AND el.pos_structure_id = 10001
若写成如下,则不会走索引N2了,因为demerminer=0这句默认转换成了to_number(demerminer)=0,索引失效了。
SELECT*
FROM ztefbp.zte_fbp_pos_stru_elements el
WHERE 1 = 1
AND el.determiner = 0
AND el.pos_structure_id = 10001
7.如果是组合索引,条件只用到一个列,这时可以把另外一个列用于一个客观条件,
比如:ZTE_FBP_EMPLOYEES_N1是由dept_id和employee_number组成的索引
——————————不走N1索引————————————————————
SELECTt.employee_id
FROM ztenet.zte_fbp_employees t
WHERE t.employee_number = '000'
——————————走N1索引—————————————————————————
SELECTt.employee_id
FROM ztenet.zte_fbp_employees t
WHERE t.employee_number = '000'
AND t.dept_id>=0
8.不是走索引就一定快,优化时根据实际情况来进行选择。
- Orcale 性能优化之索引使用
- oracle性能优化之索引
- sql性能优化之索引
- 数据库性能优化之索引
- Sql性能优化之索引
- Mysql性能优化之索引
- MySQL 数据库性能优化之索引优化
- MySQL 数据库性能优化之索引优化
- MySQL 数据库性能优化之索引优化
- MySQL数据库性能优化之索引优化
- MySQL 数据库性能优化之索引优化
- MongoDB 性能优化之索引优化
- MySQL 数据库性能优化之索引优化
- MySQL 数据库性能优化之索引优化
- MySQL 数据库性能优化之索引优化
- MySQL 数据库性能优化之索引优化
- MySQL 数据库性能优化之索引优化
- MySQL性能优化之索引优化
- J2EE的十三个技术——EJB之消息驱动JMS
- MFC 设置窗口的大小与位置
- 队列的实现
- 黑马程序员IOS-OC语言-构造方法
- Android学习(8)音频管理AudioManager-1
- Orcale 性能优化之索引使用
- Java中写记事本组件
- Android exploit with a Qualcomm processor (CVE-2012-4220)
- 去掉cajviewer 7.1.2 右上角的“中国知网数字出版物超市”
- 黑马程序员——Java基础——多线程(一)
- BFS求迷宫的最短路径
- C Primer Plus 第十三章 学习总结……2015.5.8
- JAVA 项目名称上有红叉号
- JAVA程序员学习C++之引用