oracle如何模糊查找 oracle模糊查詢走索引

如何提高oracle模糊查詢的性能?

1、使用兩邊加‘%’號(hào)的查詢,Oracle是不通過索引的,所以查詢效率很低。

成都創(chuàng)新互聯(lián),為您提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設(shè)計(jì),對(duì)服務(wù)成都軟裝設(shè)計(jì)等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場(chǎng)的競(jìng)爭(zhēng)激烈,認(rèn)真對(duì)待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!

例如:select count(*) from lui_user_base t where t.user_name like '%cs%';

2、like '...%'和 like'%...'雖然走了索引,但是效率依然很低。

3、有人說使用如下sql,他的效率提高了10倍,但是數(shù)據(jù)量小的時(shí)候

select count(*) from lui_user_base where rowid in (select rowid from lui_user_base t where t.user_name like '%cs%')

我拿100w跳數(shù)據(jù)做了測(cè)試,效果一般,依然很慢,原因:

select rowid from lui_user_base t where t.user_name like '%cs%' ? 這條sql執(zhí)行很快,那是相當(dāng)?shù)目?,但是放到select count(*) from lui_user_base where rowid in()里后,效率就會(huì)變的很慢了。

4、select count(*) from lui_user_base t where instr(t.user_name,'cs') 0

這種查詢效果很好,速度很快,推薦使用這種。因?yàn)槲覍?duì)oracle內(nèi)部機(jī)制不是很懂,只是對(duì)結(jié)果做了一個(gè)說明。

5、有人說了用全文索引,我看了,步驟挺麻煩,但是是個(gè)不錯(cuò)的方法,留著備用:

對(duì)cmng_custominfo 表中的address字段做全文檢索:

1,在oracle9201中需要?jiǎng)?chuàng)建一個(gè)分詞的東西:

BEGIN

ctx_ddl.create_preference ('SMS_ADDRESS_LEXER', 'CHINESE_LEXER');

--ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer'); 不用

end;

2,創(chuàng)建全文檢索:

CREATE INDEX INX_CUSTOMINFO_ADDR_DOCS ON cmng_custominfo(address) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('LEXER SMS_ADDRESS_LEXER');

3,查詢時(shí)候,使用:

select * from cmng_custominfo where contains (address, '金色新城')1;

4,需要定期進(jìn)行同步和優(yōu)化:

同步:根據(jù)新增記錄的文本內(nèi)容更新全文搜索的索引。

begin

ctx_ddl.sync_index('INX_CUSTOMINFO_ADDR_DOCS');

end;

優(yōu)化:根據(jù)被刪除記錄清除全文搜索索引中的垃圾

begin

ctx_ddl.optimize_index('INX_CUSTOMINFO_ADDR_DOCS', 'FAST');

end;

5,采用job做步驟4中的工作:

1)該功能需要利用oracle的JOB功能來完成

因?yàn)閛racle9I默認(rèn)不啟用JOB功能,所以首先需要增加ORACLE數(shù)據(jù)庫實(shí)例的JOB配置參數(shù):

job_queue_processes=5

重新啟動(dòng)oracle數(shù)據(jù)庫服務(wù)和listener服務(wù)。

2)同步 和 優(yōu)化

--同步 sync:

variable jobno number;

BEGIN

DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''INX_CUSTOMINFO_ADDR_DOCS'');',

SYSDATE, 'SYSDATE + (1/24/4)');

commit;

END;

--優(yōu)化

variable jobno number;

begin

DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''INX_CUSTOMINFO_ADDR_DOCS'',''FULL'');', SYSDATE, 'SYSDATE + 1');

commit;

END;

其中, 第一個(gè)job的SYSDATE + (1/24/4)是指每隔15分鐘同步一次,第二個(gè)job的SYSDATE + 1是每隔1天做一次全優(yōu)化。具體的時(shí)間間隔,可以根據(jù)應(yīng)用的需要而定。

6,索引重建

重建索引會(huì)刪除原來的索引,重新生成索引,需要較長的時(shí)間。

重建索引語法如下:

ALTER INDEX INX_CUSTOMINFO_ADDR_DOCS REBUILD;

據(jù)網(wǎng)上一些用家的體會(huì),oracle重建索引的速度也是比較快的,有一用家這樣描述:

Oracle 的全文檢索建立和維護(hù)索引要比ms sql server都要快得多,筆者的65萬記錄的一個(gè)表建立索引只需要20分鐘,同步一次只需要1分鐘。

因此,也可以考慮用job的辦法定期重建索引。

如何對(duì)ORACLE里的CLOB字段進(jìn)行模糊查詢

建議使用全文檢索(FULL TEXT SEARCH)。

用ORACLE8i中的intermedia text或者oracle9i的text對(duì)CLOB字段建一個(gè)CTXSYS.CONTEXT 類型的索引, 然后在查詢時(shí)用CONTAIN作為查詢條件.代碼如下:--創(chuàng)建表CREATE TABLE tb_clob(

userid NUMBER PRIMARY KEY,

text CLOB);--建立索引CREATE INDEX search_idx

ON tb_clob(text)

INDEXTYPE IS ctxsys.CONTEXT;--查詢SELECT COUNT(*)

如何對(duì)ORACLE里的CLOB字段進(jìn)行模糊查詢?

語法:select * from TABLE表 where\x0d\x0adbms_lob.instr(字段名(clod類型),'查詢條件',1,1) 0\x0d\x0a\x0d\x0acreate table products(\x0d\x0aproductid number(10) not null,\x0d\x0aname varchar2(255),\x0d\x0adescription CLOB);\x0d\x0a\x0d\x0a查詢語句:\x0d\x0a\x0d\x0aselect t.productid, t.name from products t\x0d\x0a\x0d\x0awhere dbms_lob.instr(t.description, 'aaa', 1, 1) 0;\x0d\x0a\x0d\x0a在Oracle中,可以使用instr函數(shù)對(duì)某個(gè)字符串進(jìn)行判斷,判斷其是否含有指定的字符。其語法為:\x0d\x0ainstr(sourceString,destString,start,appearPosition).\x0d\x0a其中sourceString代表源字符串;destString代表想聰源字符串中查找的子串;start代表查找的開始位置,該參數(shù)可選的,默認(rèn)為\x0d\x0a1;appearPosition代表想從源字符中查找出第幾次出現(xiàn)的destString,該參數(shù)也是可選的,默認(rèn)為1;如果start的值為負(fù)數(shù),那\x0d\x0a么代表從右往左進(jìn)行查找。\x0d\x0a返回值為:查找到的字符串的位置。

在ORACLE中怎么對(duì)LONG類型字段的模糊查詢

工具/材料:Management Studio。

1、首先在桌面上,雙擊打開“Management Studio”。

2、之后在Management Studio中,點(diǎn)擊左上角“新建查詢”選項(xiàng)。

3、接著在Management Studio中,輸入的sql語句“select * from test1? where longtype LIKE '%20%'?”。

4、然后在Management Studio中,點(diǎn)擊左上方“執(zhí)行”按鈕。

5、最后在Management Studio中,顯示對(duì)LONG類型字段的模糊查詢成功。

oracle 中Like 后面如何用字段名進(jìn)行模糊查詢,而不是用字符串。

1、首先雙擊桌面plsql developer軟件啟動(dòng)軟件,在連接窗口中填寫連接信息,連接數(shù)據(jù)庫。

2、連接成功后新建命令窗口,在sql查詢中一般情況下對(duì)于數(shù)據(jù)比較少的表都會(huì)使用普通查詢進(jìn)行查詢數(shù)據(jù),如下圖。

3、有的時(shí)候針對(duì)數(shù)據(jù)量比較大,而又不太確定查詢目錄的表在進(jìn)行查詢的時(shí)候,就需要進(jìn)行模糊查詢,使用關(guān)鍵字Like ,如下圖查詢出職工姓名第二個(gè)字符是o的職工信息。

4、種模糊查詢的方式只能針對(duì)字符串類型的數(shù)據(jù)列進(jìn)行查詢,其它類型的數(shù)據(jù)是無法查詢出結(jié)果的,如下圖。

5、除了模糊查詢之外還有反向模糊查詢,not like,它的使用就是根據(jù)查詢條件查詢滿足查詢條件以外的數(shù)據(jù)。

網(wǎng)頁題目:oracle如何模糊查找 oracle模糊查詢走索引
鏈接URL:http://muchs.cn/article40/hhedho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、電子商務(wù)、響應(yīng)式網(wǎng)站、企業(yè)網(wǎng)站制作搜索引擎優(yōu)化、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化