oracle Like模糊查詢與帶有關鍵字Reverse的索引應用
在對oracle的SQL優化過程中經常會遇到【like'%abc'】破壞索引的問題,但是如果真有此類需求,該如何在不破壞索引的基礎上進行查詢呢。
上程式碼
[email protected]> select reverse('123') from dual;
REVERSE('123')
--------------------------------
321
1 row selected.
[email protected]> create table test_like as select object_id,object_name from dba_objects;
Table created.
[email protected]> create index test_like__name on test_like(object_name);
Index created.
[email protected]> create index test_like__name_reverse on test_like(reverse(object_name));
Index created.
[email protected]> analyze table test_like compute statistics for table for all indexes;
Table analyzed.
[email protected]> set autotrace trace exp
-- '常量開頭的like , 會利用index ,沒問題…… '
[email protected]> select * from test_like where object_name like AS%';
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655Bytes=15720)
2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME' (NON-UNIQUE) (Cost=2 Card=118)
--'開頭和結尾都是 % ,對不起,很難優化'
[email protected]> select * from test_like where object_name like '%%';
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)
1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 ytes=15720)
-- '以常量結束,直接寫的時候是不能應用index的'
[email protected]> select * from test_like where object_name like '%S';
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)
1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 Bytes=15720)
--'以常量結束的,加個reverse 函式,又可以用上index了'
[email protected]> select * from test_like where reverse(object_name)like reverse('%AS');
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655 Bytes=15720)
2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME_REVERSE' (NON-UNIQUE) (Cost=2 Card=118)
相關推薦
oracle Like模糊查詢與帶有關鍵字Reverse的索引應用
在對oracle的SQL優化過程中經常會遇到【like'%abc'】破壞索引的問題,但是如果真有此類需求,該如何在不破壞索引的基礎上進行查詢呢。 上程式碼 [email protected]> select reverse('123') from dua
oracle like模糊查詢簡單用法
簡單 rom 模糊 acl 用法 介紹 情況 文章 分享圖片 like 用法介紹: 1、“_”:匹配單個任意字符 select * from bqh3 where name like ‘_崔‘; 2、“%”:匹配0個或多個任意字符。但有三種情況如下:
Oracle like模糊查詢-無效的列索引
1、當寫成like('%?%')時會提示無效的列索引 改成like('%'||?||'%')時可以解決 下面為轉載內容 java.sql.SQLException: 無效的列索引 “無效的列索引”其實是個低階的錯誤,原因無非幾個: 1、sql串的?號數目
oracle like模糊查詢的優化測試
三種like模糊查詢的優化: 第一種:like 'a%'這種,直接可走索引 第二種:like '%a'這種,需要用reverse反轉函式改寫SQL,再建立函式索引,如下: 改寫前: select * from test where owner like '%SCO
Oracle中like模糊查詢及萬用字元
like 模糊查詢 我們只知道個別字母或者欄位,不太確定要查詢的準確資訊時,可以使用模糊查詢(即like),查詢出所有與自己已知的"零碎"資訊有關的全部資訊。 這就要用的like模糊查詢了,其萬用字
.net like模糊查詢參數化
string sha parameter 錯誤 and 程序 報錯 sel csharp List<SqlParameter> paras = new List<SqlParameter>();
sql like模糊查詢的條件拼接
body con ted cond -c where sel apple b- 被坑了兩次,記錄加深記憶 oracle : select * from table_name where 1=1 <#if secondName?? &&
python中的mysql數據庫like模糊查詢
script art exec -m con python abc san exe 近期工作在使用python語言開發項目,工作中遇到了一個python連接mysq
記一次使用mybatis進行like 模糊查詢遇到的問題
bat 通過 模糊查詢 date 但是 AR 通配符 問題 解決辦法 "bdate like ‘#{date}%‘ and ..." 最開始這樣寫的· 將傳入的參數和%用單引號包起來,但是這會報錯 java.sql.SQLException: Parameter in
mybatis xml檔案中的大於、小於、及like模糊查詢的寫法
在xml中,特殊符號的轉義寫法如下: < < > > <> <> & & &
mysql中like模糊查詢的優化
這是我在一個百萬級資料庫資料匯出遇到的問題 比如這個語句在這個資料庫查詢很慢: select a from tms where b like ‘%haha%’ order by time limit 100; 第一種優化方法(注意:這種方法只適用於haha開頭的): //將haha欄位和
mybaits LIKE 模糊查詢
1. 引數中直接加入%% param.setUsername("%CD%"); param.setPassword("%11%"); <select id="selectPersons" resultTy
mybatis Example Criteria like 模糊查詢
用Mybatis程式碼生成工具會產生很多個XXXExample類,這些類的作用是什麼? 查閱了很多資料,在這裡總結歸納一下 簡介 XXXExample類用於構造複雜的篩選條件 它包含一個名為Criteria的內部靜態類,它包含將在where子句中一起結合的條件列
mybatis做like模糊查詢
1. 引數中直接加入%% param.setUsername("%CD%"); param.setPassword("%11%"); <select id="selectPersons" resultType="person" para
laravel原生sql操作以及like模糊查詢的坑點
此篇文章基於 laravel版本:5.5 laravel基於DB的原生查詢可以使用 DB facade 執行查詢。DB facade 為每種型別的查詢提供了方法:select、update、insert、delete 和 statement。以下是知識點: (1)執行
Oracle中模糊查詢中轉義用法
Oracle中模糊查詢中轉義的關鍵字是escape 具體用法如下 select * from DEPT_02_tmp a where a.dname like 'IT/_%'escape'/'; escape後面接的是轉義識別符號 識別符號後面跟的是 需要轉義的內
SQL---模糊查詢與正則表示式詳解和對比
1:模糊查詢 在進行資料庫查詢的時候,有完整查詢和模糊查詢之分; 完整查詢就是我們平時查詢的普通語句(對某個查詢條件確定的前提下),而模糊查詢就是常見的where 後面增加了 like 關鍵字。 一般模糊查詢語句如下: select 欄位 from 表 where 某欄位 l
mysql 優化 - like模糊查詢優化
在使用msyql進行模糊查詢的時候,很自然的會用到like語句,通常情況下,在資料量小的時候,不容易看出查詢的效率,但在資料量達到百萬級,千萬級的時候,查詢的效率就很容易顯現出來。這個時候查詢的效率就顯得很重要! 一般情況下like模糊查詢的寫法為(field已建立索引): SE
mysql正則表示式,實現多個欄位匹配多個like模糊查詢
現在有這麼一個需求 一個questions表,欄位有題目(TestSubject),選項(AnswerA,AnswerB,AnswerC,AnswerD,AnswerE) 要求欄位不包含png,jpg,jpeg,gif 正常情況下會這麼寫 select * from questions
MyBatis like (模糊查詢)
select * from user where user_name like concat('%',#{userName},'%'); select * from user where user_name like concat(#{userName},'%'); select *