1、使用兩邊加‘%’號的查詢,Oracle是不通過索引的,所以查詢效率很低。
創(chuàng)新互聯(lián)2013年至今,先為向陽等服務(wù)建站,向陽等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為向陽企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
例如:select count(*) from lui_user_base t where t.user_name like '%cs%';
2、like '...%'和 like'%...'雖然走了索引,但是效率依然很低。
3、有人說使用如下sql,他的效率提高了10倍,但是數(shù)據(jù)量小的時候
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ù)做了測試,效果一般,依然很慢,原因:
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()里后,效率就會變的很慢了。
4、select count(*) from lui_user_base t where instr(t.user_name,'cs') 0
這種查詢效果很好,速度很快,推薦使用這種。因為我對oracle內(nèi)部機制不是很懂,只是對結(jié)果做了一個說明。
5、有人說了用全文索引,我看了,步驟挺麻煩,但是是個不錯的方法,留著備用:
對cmng_custominfo 表中的address字段做全文檢索:
1,在oracle9201中需要創(chuàng)建一個分詞的東西:
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,查詢時候,使用:
select * from cmng_custominfo where contains (address, '金色新城')1;
4,需要定期進行同步和優(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功能來完成
因為oracle9I默認不啟用JOB功能,所以首先需要增加ORACLE數(shù)據(jù)庫實例的JOB配置參數(shù):
job_queue_processes=5
重新啟動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;
其中, 第一個job的SYSDATE + (1/24/4)是指每隔15分鐘同步一次,第二個job的SYSDATE + 1是每隔1天做一次全優(yōu)化。具體的時間間隔,可以根據(jù)應(yīng)用的需要而定。
6,索引重建
重建索引會刪除原來的索引,重新生成索引,需要較長的時間。
重建索引語法如下:
ALTER INDEX INX_CUSTOMINFO_ADDR_DOCS REBUILD;
據(jù)網(wǎng)上一些用家的體會,oracle重建索引的速度也是比較快的,有一用家這樣描述:
Oracle 的全文檢索建立和維護索引要比ms sql server都要快得多,筆者的65萬記錄的一個表建立索引只需要20分鐘,同步一次只需要1分鐘。
因此,也可以考慮用job的辦法定期重建索引。
最直接的辦法就是打開sql_trace:
alter
session
set
sql_trace=true;(要dba權(quán)限)
然后到服務(wù)器上追蹤文件里面查看這個session執(zhí)行了哪些sql,不過這是session級的.
也可以使用系統(tǒng)級的.
對系統(tǒng)性能有影響
查詢一和二都是全表內(nèi)查詢,一中嵌套子查詢,還是用的In操作符,效率較低。像單表的這種查詢二是最快的,大部分情況oracle內(nèi)置的東西,效率都不低的,如果還想提交效率,可在fclass加個索引
用PL/SQL Developer新建個sql窗口,將要測試的語句粘貼進去,f8看下執(zhí)行時間。
1:在plsql中按F5可以看SQL的執(zhí)行計劃
2:查系統(tǒng)視圖可以查看某個SQL的實際消耗
網(wǎng)站欄目:如何查看oracle效率 oracle視圖能提高查詢效率嗎
當(dāng)前地址:http://www.rwnh.cn/article48/hiipep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、微信小程序、網(wǎng)頁設(shè)計公司、網(wǎng)站排名、小程序開發(fā)、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)