在oracle中如何檢索 oracle怎么看索引

oracle怎么通過索引查詢數(shù)據(jù)語句?

oracle對于數(shù)據(jù)庫中的表信息,存儲在系統(tǒng)表中。查詢已創(chuàng)建好的表索引,可通過相應(yīng)的sql語句到相應(yīng)的表中進(jìn)行快捷的查詢:\x0d\x0a1. 根據(jù)表名,查詢一張表的索引\x0d\x0a\x0d\x0aselect * from user_indexes where table_name=upper('表名');\x0d\x0a\x0d\x0a2. 根據(jù)索引號,查詢表索引字段\x0d\x0a\x0d\x0aselect * from user_ind_columns where index_name=('索引名');\x0d\x0a\x0d\x0a3.根據(jù)索引名,查詢創(chuàng)建索引的語句\x0d\x0a\x0d\x0aselect dbms_metadata.get_ddl('INDEX','索引名', ['用戶名']) from dual ; --['用戶名']可省,默認(rèn)為登錄用戶\x0d\x0a\x0d\x0aPS:dbms_metadata.get_ddl還可以得到建表語句,如:\x0d\x0a\x0d\x0aSELECT DBMS_METADATA.GET_DDL('TABLE','表名', ['用戶名']) FROM DUAL ; //取單個表的建表語句,['用戶名']可不輸入,默認(rèn)為登錄用戶\x0d\x0aSELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u; //取用戶下所有表的建表語句\x0d\x0a\x0d\x0a當(dāng)然,也可以用pl/sql developer工具來查看相關(guān)的表的各種信息。

臨滄網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站從2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站

怎么更好的利用Oracle全文檢索

對多字段建立全文索引

很多時候需要從多個文本字段中查詢滿足條件的記錄,這時就需要建立針對多個字段的全文索引,例如需要從pmhsubjects(專題表)的subjectname(專題名稱)和briefintro(簡介)上進(jìn)行全文檢索,則需要按以下步驟進(jìn)行操作:

??

建議多字段索引的preference

以ctxsys登錄,并執(zhí)行:

全文索引的維護(hù)

對于CTXSYS.CONTEXT索引,當(dāng)應(yīng)用程序?qū)磉M(jìn)行DML操作后,對基表的索引維護(hù)是必須的。索引維護(hù)包括索引同步和索引優(yōu)化。

在索引建好后,我們可以在該用戶下查到Oracle自動產(chǎn)生了以下幾個表:(假設(shè)索引名為myindex):

DR$myindex$I、DR$myindex$K、DR$myindex$R、DR$myindex$N其中以I表最重要,可以查詢一下該表,看看有什么內(nèi)容:

這里就不列出查詢接過了。可以看到,該表中保存的其實(shí)就是Oracle

分析你的文檔后,生成的term記錄在這里,包括term出現(xiàn)的位置、次數(shù)、hash值等。當(dāng)文檔的內(nèi)容改變后,可以想見這個I表的內(nèi)容也應(yīng)該相應(yīng)改變,才能保證Oracle在做全文檢索時正確檢索到內(nèi)容(因?yàn)樗^全文檢索,其實(shí)核心就是查詢這個表)。這就用到sync(同步)

optimize(優(yōu)化)了。

同步(sync):

將新的term

保存到I表;

優(yōu)化(optimize):

清除I表的垃圾,主要是將已經(jīng)被刪除的term從I表刪除。

當(dāng)基表中的被索引文檔發(fā)生insert、update、delete操作的時候,基表的改變并不能馬上影響到索引上直到同步索引。可以查詢視圖CTX_USER_PENDING查看相應(yīng)的改動。例如:

同步和優(yōu)化方法:

可以使用Oracle提供的ctx_ddl包同步和優(yōu)化索引

一.

對于CTXCAT類型的索引來說,

當(dāng)對基表進(jìn)行DML操作的時候,Oracle自動維護(hù)索引。對文檔的改變馬上反映到索引中。CTXCAT是事務(wù)形的索引。

索引的同步

在對基表插入,修改,刪除之后同步索引。推薦使用sync同步索引。語法:

指定一個大的內(nèi)存時候可以加快索引效率和查詢速度,且索引有較少的碎片

part_name

同步哪個分區(qū)索引。

parallel_degree

并行同步索引。設(shè)置并行度。

例如:

同步索引myindex:Exec

ctx_ddl.sync_index

('myindex');

實(shí)施建議:建議通過oracle的job對索引進(jìn)行同步

索引的優(yōu)化

經(jīng)常的索引同步將會導(dǎo)致你的CONTEXT索引產(chǎn)生碎片。索引碎片嚴(yán)重的影響了查詢的反應(yīng)速度。你可以定期優(yōu)化索引來減少碎片,減少索引大小,提高查詢效率。

oracle 怎樣查詢某用戶下的所有表的表名

1、首先在計算機(jī)中,打開Oracle的連接程序,用新建的數(shù)據(jù)庫管理員,進(jìn)入【Oracle控制】的窗口上,鼠標(biāo)左鍵單擊【服務(wù)器】按鈕,并選擇【SQL工作表】。

2、接著,在【Oracle服務(wù)器】的窗口上,在輸入窗口中輸入SQL查詢語句,并單擊【執(zhí)行】按鈕,可以看到查詢不到索引表,需要調(diào)整SQL語句。

3、然后,在【SQL工作表】的窗口上,輸入查詢索引表的SQL語句,可以作為參考,如下圖所示。

4、?接著,在【SQL工作表】的窗口上,輸查詢索引表的SQL語句,并單擊【執(zhí)行】按鈕。

5、然后,在【SQL工作表】的窗口上,可以看到SQL語句執(zhí)行成功的提示信息,查詢到用戶的索引表中的字段。

如何更好的利用Oracle全文檢索

不使用Oracle text功能,也有很多方法可以在Oracle數(shù)據(jù)庫中搜索文本.可以使用標(biāo)準(zhǔn)的INSTR函數(shù)和LIKE操作符實(shí)現(xiàn)。

SELECT *FROM mytext WHERE INSTR (thetext, 'Oracle') 0;

SELECT * FROM mytext WHERE thetext LIKE '%Oracle%';

有很多時候,使用instr和like是很理想的, 特別是搜索僅跨越很小的表的時候.然而通過這些文本定位的方法將導(dǎo)致全表掃描,對資源來說消耗比較昂貴,而且實(shí)現(xiàn)的搜索功能也非常有限,因此對海量的文本 數(shù)據(jù)進(jìn)行搜索時,建議使用oralce提供的全文檢索功能 建立全文檢索的步驟步驟一 檢查和設(shè)置數(shù)據(jù)庫角色首先檢查數(shù)據(jù)庫中是否有CTXSYS用戶和CTXAPP腳色。如果沒有這個用戶和角色,意味著你的數(shù)據(jù)庫 創(chuàng)建時未安裝intermedia功能。你必須修改數(shù)據(jù)庫以安裝這項(xiàng)功能。 默認(rèn)安裝情況下,ctxsys用戶是被鎖定的,因此要先啟用ctxsys的用 戶。 步驟二 賦權(quán) 在ctxsys用戶下把ctx_ddl的執(zhí)行權(quán)限賦于要使用全文索引的用戶,例:

grant execute on ctx_ddl to pomoho;

步驟三 設(shè)置詞法分析器(lexer)

Oracle實(shí)現(xiàn)全文檢索,其機(jī)制其實(shí)很簡單。即通過Oracle專利的詞法分析器(lexer),將文章中所有的表意單元(Oracle 稱為 term)找出來,記錄在一組 以dr$開頭的表中,同時記下該term出現(xiàn)的位置、次數(shù)、hash 值等信息。檢索時,Oracle 從這組表中查找相應(yīng)的term,并計算其出現(xiàn)頻率,根據(jù)某個算法來計算每個文檔的得分(score),即所謂的‘匹配率’。而lexer則是該機(jī)制的核 心,它決定了全文檢索的效率。Oracle 針對不同的語言提供了不同的 lexer, 而我們通常能用到其中的三個:

n basic_lexer: 針對英語。它能根據(jù)空格和標(biāo)點(diǎn)來將英語單詞從句子中分離,還能自動將一些出現(xiàn)頻率過高已經(jīng)失去檢索意義的單詞作為‘垃圾’處理,如if , is 等,具有較高的處理效率。但該lexer應(yīng)用于漢語則有很多問題,由于它只認(rèn)空格和標(biāo)點(diǎn),而漢語的一句話中通常不會有空格,因此,它會把整句話作為一個 term,事實(shí)上失去檢索能力。以‘中國人民站起來了’這句話為例,basic_lexer 分析的結(jié)果只有一個term ,就是‘中國人民站起來了’。此時若檢索‘中國’,將檢索不到內(nèi)容。

n chinese_vgram_lexer: 專門的漢語分析器,支持所有漢字字符集(ZHS16CGB231280 ZHS16GBK ZHT32EUC ZHT16BIG5 ZHT32TRIS ZHT16MSWIN950 ZHT16HKSCS UTF8 )。該分析器按字為單元來分析漢語句子。‘中國人民站起來了’這句話,會被它分析成如下幾個term: ‘中’,‘中國’,‘國人’,‘人民’,‘民站’,‘站起’,起來’,‘來了’,‘了’。可以看出,這種分析方法,實(shí)現(xiàn)算法很簡單,并且能實(shí)現(xiàn)‘一網(wǎng)打 盡’,但效率則是差強(qiáng)人意。

n chinese_lexer: 這是一個新的漢語分析器,只支持utf8字符集。上面已經(jīng)看到,chinese vgram lexer這個分析器由于不認(rèn)識常用的漢語詞匯,因此分析的單元非常機(jī)械,像上面的‘民站’,‘站起’在漢語中根本不會單獨(dú)出現(xiàn),因此這種term是沒有 意義的,反而影響效率。chinese_lexer的最大改進(jìn)就是該分析器 能認(rèn)識大部分常用漢語詞匯,因此能更有效率地分析句子,像以上兩個愚蠢的單元將不會再出現(xiàn),極大 提高了效率。但是它只支持 utf8, 如果你的數(shù)據(jù)庫是zhs16gbk字符集,則只能使用笨笨的那個Chinese vgram lexer.

如果不做任何設(shè)置,Oracle 缺省使用basic_lexer這個分析器。要指定使用哪一個lexer, 可以這樣操作:

第一. 當(dāng)前用戶下下建立一個preference(例:在pomoho用戶下執(zhí)行以下語句)

exec ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer');

第二. 在建立全文索引索引時,指明所用的lexer:

CREATE INDEX myindex ON mytable(mycolumn) indextype is ctxsys.context

parameters('lexer my_lexer');

這樣建立的全文檢索索引,就會使用chinese_vgram_lexer作為分析器。

步驟四 建立索引

通過以下語法建立全文索引

CREATE INDEX [schema.]index on [schema.]table(column) INDEXTYPE IS ctxsys.context [ONLINE]

LOCAL [(PARTITION [partition] [PARAMETERS('paramstring')]

[, PARTITION [partition] [PARAMETERS('paramstring')]])]

[PARAMETERS(paramstring)] [PARALLEL n] [UNUSABLE];

例:

CREATE INDEX ctx_idx_menuname ON pubmenu(menuname)

indextype is ctxsys.context parameters('lexer my_lexer')

步驟五 使用索引

使用全文索引很簡單,可以通過:

select * from pubmenu where contains(menuname,'上傳圖片')0

全文索引的種類

建立的Oracle Text索引被稱為域索引(domain index),包括4種索引類型:

l CONTEXT

2 CTXCAT

3 CTXRULE

4 CTXXPATH

依據(jù)你的應(yīng)用程序和文本數(shù)據(jù)類型你可以任意選擇一種。

對多字段建立全文索引

很多時候需要從多個文本字段中查詢滿足條件的記錄,這時就需要建立針對多個字段的全文索引,例如需要從pmhsubjects(專題表)的 subjectname(專題名稱)和briefintro(簡介)上進(jìn)行全文檢索,則需要按以下步驟進(jìn)行操作:

? 建議多字段索引的preference

以ctxsys登錄,并執(zhí)行:

EXEC ctx_ddl.create_preference(' ctx_idx_subject_pref',

'MULTI_COLUMN_DATASTORE');

? 建立preference對應(yīng)的字段值(以ctxsys登錄)

EXEC ctx_ddl.set_attribute(' ctx_idx_subject_pref ','columns','subjectname,briefintro');

? 建立全文索引

CREATE INDEX ctx_idx_subject ON pmhsubjects(subjectname)

INDEXTYPE ISctxsys.CONTEXT PARAMETERS('DATASTORE ctxsys.ctx_idx_subject_pref lexer my_lexer')

? 使用索引

select * from pmhsubjects where contains(subjectname,'李宇春')0

全文索引的維護(hù)

對于CTXSYS.CONTEXT索引,當(dāng)應(yīng)用程序?qū)磉M(jìn)行DML操作后,對基表的索引維護(hù)是必須的。索引維護(hù)包括索引同步和索引優(yōu)化。

在索引建好后,我們可以在該用戶下查到Oracle自動產(chǎn)生了以下幾個表:(假設(shè)索引名為myindex):

DR$myindex$I、DR$myindex$K、DR$myindex$R、DR$myindex$N其中以I表最重要,可以查詢一下該表, 看看有什么內(nèi)容:

SELECT token_text, token_count FROM dr$i_rsk1$I WHERE ROWNUM = 20;

這里就不列出查詢接過了。可以看到,該表中保存的其實(shí)就是Oracle 分析你的文檔后,生成的term記錄在這里,包括term出現(xiàn)的位置、次數(shù)、hash值等。當(dāng)文檔的內(nèi)容改變后,可以想見這個I表的內(nèi)容也應(yīng)該相應(yīng)改變, 才能保證Oracle在做全文檢索時正確檢索到內(nèi)容(因?yàn)樗^全文檢索,其實(shí)核心就是查詢這個表)。這就用到sync(同步) 和 optimize(優(yōu)化)了。

同步(sync): 將新的term 保存到I表;

優(yōu)化(optimize): 清除I表的垃圾,主要是將已經(jīng)被刪除的term從I表刪除。

當(dāng)基表中的被索引文檔發(fā)生insert、update、delete操作的時候,基表的改變并不能馬上影響到索引上直到同步索引。可以查詢視圖 CTX_USER_PENDING查看相應(yīng)的改動。例如:

SELECT pnd_index_name, pnd_rowid,

TO_CHAR (pnd_timestamp, 'dd-mon-yyyy hh24:mi:ss') timestamp

FROM ctx_user_pending;

該語句的輸出類似如下:

PND_INDEX_NAME PND_ROWID TIMESTAMP

------------------------------ ------------------ --------------------

MYINDEX AAADXnAABAAAS3SAAC 06-oct-1999 15:56:50

同步和優(yōu)化方法: 可以使用Oracle提供的ctx_ddl包同步和優(yōu)化索引

一. 對于CTXCAT類型的索引來說, 當(dāng)對基表進(jìn)行DML操作的時候,Oracle自動維護(hù)索引。對文檔的改變馬上反映到索引中。CTXCAT是事務(wù)形的索引。

索引的同步

在對基表插入,修改,刪除之后同步索引。推薦使用sync同步索引。語法:

ctx_ddl.sync_index(

idx_name IN VARCHAR2 DEFAULT NULL

memory IN VARCHAR2 DEFAULT NULL,

part_name IN VARCHAR2 DEFAULT NULL

parallel_degree IN NUMBER DEFAULT 1);

idx_name 索引名稱

memory 指定同步索引需要的內(nèi)存。默認(rèn)是系統(tǒng)參數(shù)DEFAULT_INDEX_MEMORY 。

指定一個大的內(nèi)存時候可以加快索引效率和查詢速度,且索引有較少的碎片

part_name 同步哪個分區(qū)索引。

parallel_degree 并行同步索引。設(shè)置并行度。

例如:

同步索引myindex:Exec ctx_ddl.sync_index ('myindex');

實(shí)施建議:建議通過oracle的job對索引進(jìn)行同步

索引的優(yōu)化

經(jīng)常的索引同步將會導(dǎo)致你的CONTEXT索引產(chǎn)生碎片。索引碎片嚴(yán)重的影響了查詢的反應(yīng)速度。你可以定期優(yōu)化索引來減少碎片,減少索引大小,提高 查詢效率。

當(dāng)文本從表中刪除的時候,Oracle Text標(biāo)記刪除的文檔,但是并不馬上修改索引。因此,就的文檔信息占據(jù)了不必要的空間,導(dǎo)致了查詢額外的開銷。你必須以FULL模式優(yōu)化索引,從索引中 刪除無效的舊的信息。這個過程叫做垃圾處理。當(dāng)你經(jīng)常的對表文本數(shù)據(jù)進(jìn)行更新,刪除操作的時候,垃圾處理是很必要的。

exec ctx_ddl.optimize_index ('myidx', 'full');

實(shí)施建議:每天在系統(tǒng)空閑的時候?qū)θ?文索引進(jìn)行相應(yīng)的優(yōu)化,以提高檢索的效率

如何從 Oracle 數(shù)據(jù)源檢索數(shù)據(jù)

同時查詢2張表數(shù)據(jù)有很多種方法(下面的a,b為表名,A,B為表的別名):

1,select A.*,B.* from a A,b B;

這樣查出來的是a的所有數(shù)據(jù)在前面幾列,b的數(shù)據(jù)在后面幾列。

2,select * from a cross join a

這樣查出來的數(shù)據(jù)是2張表的笛卡爾積。

即a的數(shù)據(jù)量乘以b的數(shù)據(jù)量的積

3,如果兩張表擁有相同的字段,你可以使用left join或者right join

select * from table1 left join table2 on table1.id=table2.id

網(wǎng)頁名稱:在oracle中如何檢索 oracle怎么看索引
網(wǎng)頁路徑:http://m.kartarina.com/article32/hgsgsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站標(biāo)簽優(yōu)化品牌網(wǎng)站建設(shè)云服務(wù)器品牌網(wǎng)站制作網(wǎng)站設(shè)計

廣告

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

成都網(wǎng)站建設(shè)公司
主站蜘蛛池模板: 亚洲综合无码AV一区二区| 国产亚洲精久久久久久无码| 亚洲中文久久精品无码| 日木av无码专区亚洲av毛片| 亚洲日韩精品无码AV海量| 国产精品无码AV天天爽播放器| 内射无码午夜多人| 激情无码人妻又粗又大中国人| 免费无码午夜福利片69| 久久久久成人精品无码中文字幕 | 无码人妻精品一二三区免费| 2014AV天堂无码一区| 亚洲av无码片vr一区二区三区| 亚洲精品无码av人在线观看| 无码精品A∨在线观看无广告| 久久精品亚洲AV久久久无码| 中文字幕日韩精品无码内射| 国产精品无码一本二本三本色 | 精品无码国产污污污免费网站 | 免费a级毛片无码a∨蜜芽试看| 丰满日韩放荡少妇无码视频 | 13小箩利洗澡无码视频网站免费 | 国产精品99久久久精品无码| 青春草无码精品视频在线观| 无码丰满熟妇juliaann与黑人| 国产乱子伦精品无码码专区| 国产真人无码作爱视频免费 | 狠狠躁狠狠爱免费视频无码| 久久精品无码中文字幕| 97碰碰碰人妻视频无码| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 亚洲av无码av制服另类专区| 精品久久久久久无码国产| 日韩乱码人妻无码中文字幕视频| 亚洲成av人无码亚洲成av人| 亚洲精品自偷自拍无码| 久久水蜜桃亚洲AV无码精品| 久久久久久亚洲av无码蜜芽| 无码av专区丝袜专区| 成人无码A区在线观看视频| 亚洲日韩精品无码一区二区三区|