国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

索引失效的情形

2019-11-08 20:49:18
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
1.隱式轉(zhuǎn)換導(dǎo)致索引失效.這一點(diǎn)應(yīng)當(dāng)引起重視.也是開(kāi)發(fā)中經(jīng)常會(huì)犯的錯(cuò)誤. 由于表的字段tu_mdn定義為varchar2(20),但在查詢時(shí)把該字段作為number類型以where條件傳給Oracle,這樣會(huì)導(dǎo)致索引失效. 錯(cuò)誤的例子:select * fromtest where tu_mdn=13333333333; 正確的例子:select * fromtest where tu_mdn='13333333333';   2.對(duì)索引列進(jìn)行運(yùn)算導(dǎo)致索引失效,我所指的對(duì)索引列進(jìn)行運(yùn)算包括(+,-,*,/,! 等) 錯(cuò)誤的例子:select* from test where id-1=9; 正確的例子:select * fromtest where id=10;   3.使用Oracle內(nèi)部函數(shù)導(dǎo)致索引失效.對(duì)于這樣情況應(yīng)當(dāng)創(chuàng)建基于函數(shù)的索引.     錯(cuò)誤的例子:select * from test where round(id)=10;說(shuō)明,此時(shí)id的索引已經(jīng)不起作用了     正確的例子:首先建立函數(shù)索引,create index test_id_fbi_idx on test(round(id));然后select * from test where round(id)=10; 這時(shí)函數(shù)索引起作用了   4.以下使用會(huì)使索引失效,應(yīng)避免使用; a. 使用 <> 、not in、not exist、!= b. like "%_"百分號(hào)在前(可采用在建立索引時(shí)用reverse(columnName)這種方法處理)      c. 單獨(dú)引用復(fù)合索引里非第一位置的索引列.應(yīng)總是使用索引的第一個(gè)列,如果索引是建立在多個(gè)列上,只有在它的第一個(gè)列被where子句引用時(shí),優(yōu)化器才會(huì)選擇使用該索引。 d.字符型字段為數(shù)字時(shí)在where條件里不添加引號(hào). e.當(dāng)變量采用的是times變量,而表的字段采用的是date變量時(shí).或相反情況。     5. 不要將空的變量值直接與比較運(yùn)算符(符號(hào))比較。  如果變量可能為空,應(yīng)使用 IS NULL 或 IS NOT NULL 進(jìn)行比較,或者使用 ISNULL函數(shù)。   6. 不要在 SQL 代碼中使用雙引號(hào)。 因?yàn)樽址A渴褂脝我?hào)。如果沒(méi)有必要限定對(duì)象名稱,可以使用(非 ANSI SQL標(biāo)準(zhǔn))括號(hào)將名稱括起來(lái)。   7.將索引所在表空間和數(shù)據(jù)所在表空間分別設(shè)于不同的磁盤(pán)chunk上,有助于提高索引查詢的效率。   8.Oracle默認(rèn)使用的基于代價(jià)的SQL優(yōu)化器(CBO)非常依賴于統(tǒng)計(jì)信息,一旦統(tǒng)計(jì)信息不正常,會(huì)導(dǎo)致數(shù)據(jù)庫(kù)查詢時(shí)不使用索引或使用錯(cuò)誤的索引。    一般來(lái)說(shuō),Oracle的自動(dòng)任務(wù)里面會(huì)包含更新統(tǒng)計(jì)信息的語(yǔ)句,但如果表數(shù)據(jù)發(fā)生了比較大的變化(超過(guò)20%),可以考慮立即手動(dòng)更新統(tǒng)計(jì)信息,例如:analyze table abc computestatistics,但注意,更新統(tǒng)計(jì)信息比較耗費(fèi)系統(tǒng)資源,建議在系統(tǒng)空閑時(shí)執(zhí)行。   9. Oracle在進(jìn)行一次查詢時(shí),一般對(duì)一個(gè)表只會(huì)使用一個(gè)索引.    因此,有時(shí)候過(guò)多的索引可能導(dǎo)致Oracle使用錯(cuò)誤的索引,降低查詢效率。例如某表有索引1(Policyno)和索引2(classcode),如果查詢條件為policyno = ‘xx’ and classcode = ‘xx’,則系統(tǒng)有可能會(huì)使用索引2,相較于使用索引1,查詢效率明顯降低。   10. 優(yōu)先且盡可能使用分區(qū)索引。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 枝江市| 积石山| 汉沽区| 扎鲁特旗| 信宜市| 肇源县| 乌恰县| 大关县| 石首市| 军事| 廉江市| 砀山县| 江西省| 巴里| 连平县| 炉霍县| 夏河县| 印江| 平泉县| 巨鹿县| 新竹市| 莫力| 博乐市| 当阳市| 长寿区| 固安县| 土默特左旗| 聂拉木县| 长治市| 宁远县| 察哈| 襄垣县| 甘孜| 巩留县| 宜川县| 德昌县| 潮安县| 大关县| 吐鲁番市| 历史| 肥西县|