1. 程式人生 > >快速掌握Oracle資料庫中的like優化-效能調優

快速掌握Oracle資料庫中的like優化-效能調優

掌握Oracle資料庫中的like優化-效能調優
    1.儘量不要使用 like '%..%'
    2.對於 like '..%..' (不以 % 開頭),Oracle可以應用 colunm上的index
    3.對於 like '%...' 的 (不以 % 結尾),可以利用reverse + function index 的形式,變化成 like '..%'
    程式碼:
    -- '建測試表和Index,注意,重點在於帶reverse的function index。同時,一定要使用CBO才行……
    [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優化-效能調

掌握Oracle資料庫中的like優化-效能調優    1.儘量不要使用 like '%..%'    2.對於 like '..%..' (不以 % 開頭),Oracle可以應用 colunm上的index    3.對於 like '%...' 的 (不以 % 結尾),可

Oracle資料庫like優化-效能調

1。儘量不要使用 like '%..%'         2。對於 like '..%..' (不以 % 開頭),Oracle可以應用 colunm上的index         3。對於 like '%...' 的 (不以 % 結尾),可以利用reverse + fu

網站高併發優化效能調總結

最近在對PHP網站高併發高效能有所領悟,今天寫一篇關於這方面的文章。今天用我的測試站點:http://zhimo.yuanzhumuban.cc/來講解例項。 支模網整體開發到上線為10個月左右,後端採用php開源框架destoon,站點總資料為800萬,其中每天會更新入庫資料5000-50000資料不等,

oraclelike優化的方法

在oracle中對於like操作時,如果是前後都是模糊查詢的時候(類似於col01 like ‘%xxx%’)是沒有辦法用到索引的,這裡提供一種對於這種情況的優化思路,主要的思路是把大表變小,把查詢的實體表變窄,把需要的資料放到索引裡. 常規的寫法:  create tab

oracle資料庫truncate表後如何快速恢復

      在生產中,極有可能遇到不小心truncate表的情況,truncate表後不會產生日誌記錄和回滾段空間的使用,不能用閃回恢復。尤其是在沒有任何備份的情況下所以恢復起來相當麻煩,雖然在有備份

oracle 效能調資料庫的常見效能問題

在Oracle資料庫中找到的常見的效能問題  這部分列列表,並且描述在oracle資料庫中存在的通用效能問題。 在隨後的oracle效能方法中,你應該能偶避免這些問題。如果你操作過 這些問題的經驗,那麼重複oracle效能方法中的步驟就可以了。這在利用oracle

MySQL、SQL server 、Oracle資料庫查詢所有的資料庫,查詢指定資料庫所有表名,查詢所有的欄位的名字

MySQL中查詢所有資料庫名和表名 1.查詢所有資料庫 show databases; 2.查詢指定資料庫中所有表名 select table_name from information_schema.tables where table_schema='database_name' a

mybatis 在oracle資料庫插入資料時獲取自增ID sequence序列

在oracle中sequence就是序號,每次取的時候它會自動增加。sequence與表沒有關係。 Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE許可權。 建立語句如下: CREATE SEQUEN

Oracle資料庫複製表結構和表資料

1. 複製表結構及其資料: create table new_table as select * from old_table 2. 只複製表結構: create table new_tableas select * from old_tablewhere 1=2; 或者:

兩個Oracle資料庫的表的結構和資料的複製方法

1. 複製表結構及其資料: create table table_name_new as select * from table_name_old 2. 只複製表結構: create table table_name_new as select * from table_name_old

日期型別的資料在Oracle資料庫的儲存和查詢

使用Oracle資料庫,mybatis的對映檔案中日期型別的資料,如果定義為<result column =“UPDATED_DATE" jdbcType =“DATE” property =“updatedDate”/>,即使在後臺你為日期賦予年月日時分秒,但儲存到資料庫中將只

快速掌握 MongoDB 資料庫

阿里雲大學:快速掌握 MongoDB 資料庫 本課程主要講解MongoDB資料庫的基本知識,包括MongoDB資料庫的安裝、配置、服務的啟動、資料的CRUD操作函式使用、MongoDB索引的使用(唯一索引、地理索引、過期索引、全文索引等)、MapReduce操作實現、使用者管理、Java對Mon

oracle資料庫使用hibernate生成表不能正確建立表

最近在專案中使用hibernate的動態生成表,即將hbm2ddl.auto配置成update時,發現hibernate並沒有按照預設的生成規則生成相應的資料表資訊。但奇怪的是,只是部分表沒有生成,而其它的表即生成成功了。重新啟動專案,發現問題依舊。奇怪的是,雖然有些表沒有生成,但它相關聯的關聯表即生成了,而

PageHelper5.0在oracle資料庫使用

原理:         pageHelper會使用ThreadLocal獲取到同一執行緒中的變數資訊,各個執行緒之間的Threadlocal不會相互干擾,也就是Thread1中的ThreadLocal1之後獲取到Tr

plsql 儲存csv檔案 到oracle 資料庫

最近在用oracle資料庫,在使用plsql中遇到的一些問題。今天再記錄一下吧。 1、建表。目的是:被匯入到資料的儲存位置。 因為資料庫中曾經有過相同表結構的表,所以直接使用SQL建表。 -- T_FULL_DEVICE表 CREATE TABLE "XXXX"."T_FULL_DE

oracle資料庫選擇桌面類和伺服器類的區別

在以前的學習過程中,一直用到的都是sql server資料庫,之後接觸到了oracle資料庫。在安裝過程中,有兩個選項,桌面類和伺服器類,當時按照網上的安裝步驟,選擇了桌面類,後來公司裡他們安裝都是用的伺服器類,後來查了查兩者的區別。 桌面類――這種安裝方式一般適用於桌上型電腦和筆記本。它包含一

oracle 資料庫(建立、解鎖、授權、刪除)使用者

上文我們已經建立了名為orcl66的資料庫。 想要在資料庫中建立、修改使用者需要我們以管理員許可權登入到資料庫中。 首先我們通過sqlplus命令登入連線資料庫。 輸入sqlplus命令--使用者名稱: sys as sysdba (回車)--口令:(任意字元都可以登入) 登陸成功後就可以建立新使

Oracle資料庫對誤刪資料的恢復

如果一不小心對Oracle資料庫中的資料進行了誤刪除操作,那麼如何進行資料恢復呢(不考慮全庫備份和利用歸檔日誌)?如果使用的是9i以及之後的版本,那麼我們可以採用閃回技術對誤刪除的資料進行恢復。方式有兩種。 原理: 利用oracle提供的閃回方法,如果在刪除資料後還沒做大量的操作(只

Oracle資料庫使用者與模式的區別與聯絡

使用者與模式 使用者(user):Oracle使用者是用連線資料庫和訪問資料庫物件的。(使用者是用來連線資料庫訪問資料庫)。 模式(schema):模式是資料庫物件的集合。模式物件是資料庫資料的邏輯結構。(把資料庫物件用模式分開成不同的邏輯結構)。 使用者(user)與模式(schema)的

Oracle資料庫查詢結果集中保留兩位小數的問題

工作中遇到的Oracle資料庫欄位格式化問題,在此記錄  保留兩位小數主要分為兩種情況:  1.數字保留兩位小數;(小數點左側數字可能比較大,比如1234567890.12)  2.百分比保留兩位小數;(小數點左側數字數字小於等於100,比如98.76%) 現針對O