oracle备份能备份索引吗,ORACLE会使索引失效的条件
1. 沒有 WHERE 子句
2. 使用 IS NULL 和 IS NOT NULL
SELECT ... FROM emp WHERE comm IS NULL; comm 列的索引會(huì)失效
3. WHERE 子句中使用函數(shù)
如果沒有使用基于函數(shù)的索引,那么 where 子句中對(duì)存在索引的列使用函數(shù)時(shí),會(huì)使優(yōu)化器忽略掉這些索引。例如:
select * from staff where trunc(birthdate) = '01-MAY-82';
但是把函數(shù)應(yīng)用在條件上,索引是可以生效的,把上面的語句改成下面的語句,就可以通過索引進(jìn)行查找。
select * from staff where birthdate < (to_date('01-MAY-82') + 0.9999);
注意:對(duì)于 MIN, MAX 函數(shù),Oracle?仍然使用索引。
4. 使用 LIKE ‘%T’ 進(jìn)行模糊查詢
5. WHERE 子句中使用不等于操作
不等于操作包括:<>, !=, NOT colum >= ?, NOT colum <= ?
對(duì)于這個(gè)限制條件可以通過 OR 替代,例如: colum <> 0 ===> colum>0 OR colum<0
6. 等于和范圍索引不會(huì)被合并使用
SELECT emp_id, emp_m, salary_q ... FROM emp WHERE job='manager' AND deptno>10
job 和 deptno 都是非唯一索引,這種條件下 oracle 不會(huì)合并索引,它只會(huì)使用第一個(gè)索引。
7. 比較不匹配數(shù)據(jù)類型
dept_id是一個(gè)varchar2型的字段,在這個(gè)字段上有索引,但是下面的語句會(huì)執(zhí)行全表掃描。
select * from dept where dept_id = 900198;
這是因?yàn)?oracle 會(huì)自動(dòng)把 where 子句轉(zhuǎn)換成 to_number(dept_id)=900198,相當(dāng)于使用函數(shù),這樣就限制了索引的使用。正確寫法如下:
select * from dept where dept_id = '900198';
總結(jié)
以上是生活随笔為你收集整理的oracle备份能备份索引吗,ORACLE会使索引失效的条件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php数组遍历相同的元素覆盖_php获取
- 下一篇: 分布式认知在计算机应用系统,人机交互作业