日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

oracle or索引失效_oracle数据库中索引会失效的几种情况

發布時間:2024/10/12 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle or索引失效_oracle数据库中索引会失效的几种情况 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

創建Oracle 索引的目的是為了避免全表掃描數據,提高查詢效率,但是如果sql語句寫的不好致使索引失效,反而會影響數據查詢效率。以下幾種情況就會導致索引失效:

沒有 WHERE 子句

眾所周知,添加索引的字段必需要在where條件后適當使用才會生效,如果連查詢條件都沒有,那肯定不會用到索引的。

使用 IS NULL 和 IS NOT NULL

select * from emp where colnum is null; colnum列的索引會失效

WHERE 子句中使用函數不規范

如果沒有使用基于函數的索引,那么 where 子句中對存在索引的列使用函數時,會使優化器忽略掉這些索引。例如:

select * from staff where trunc(birthdate) = '01-MAY-82';

但是把函數應用在條件上,索引是可以生效的,把上面的語句改成下面的語句,就可以通過索引進行查找。

select * from staff where birthdate < (to_date('01-MAY-82') + 0.9999);

注意:對于 MIN, MAX 函數,Oracle 仍然使用索引。

使用 LIKE ‘%T’ 進行模糊查詢

select * from student where name like 'aaa%' ; // 'aaa%' 會用到索引

select * from student where name like '%aaa' ; //'%aaa' 或者 '_aaa' 不會使用索引

WHERE 子句中使用不等于操作

不等于操作包括:<>, !=, NOT colum >= ?, NOT colum <= ?

對于這個限制條件可以通過 OR 替代,例如: colum <> 0 ===> colum> 0 OR colum<0

等于和范圍索引不會被合并使用

SELECT emp_id, emp_m, salary_q ... FROM emp WHERE job='manager' AND deptno>10

job 和 deptno 都是非唯一索引,這種條件下 oracle 不會合并索引,它只會使用第一個索引。

比較不匹配數據類型

dept_id是一個varchar2型的字段,在這個字段上有索引,但是下面的語句會執行全表掃描。

select * from temp where dept_id = 100101;

這是因為 oracle 會自動把 where 子句轉換成 to_number(dept_id)=900198,相當于使用函數,這樣就限制了索引的使用。正確寫法如下:

select * from temp where dept_id = '100101';

總結

以上是生活随笔為你收集整理的oracle or索引失效_oracle数据库中索引会失效的几种情况的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。