導(dǎo)致索引失效的一些情況

作者 | 末
來源 | https: //www.cnblogs.com/areyouready/p/7802885.html

  1. 隱式轉(zhuǎn)換導(dǎo)致索引失效.這一點應(yīng)當(dāng)引起重視.也是開發(fā)中經(jīng)常會犯的錯誤.

由于表的字段tu_mdn定義為varchar2(20),但在查詢時把該字段作為number類型以where條件傳給Oracle,這樣會導(dǎo)致索引失效.

錯誤的例子:select from test where tu_mdn=13333333333;

正確的例子:select from test where tu_mdn='13333333333';

  1. 對索引列進行運算導(dǎo)致索引失效,我所指的對索引列進行運算包括(+疾就,-,,/评疗,! 等)

錯誤的例子:select from test where id-1=9;

正確的例子:select from test where id=10;

  1. 使用Oracle內(nèi)部函數(shù)導(dǎo)致索引失效.對于這樣情況應(yīng)當(dāng)創(chuàng)建基于函數(shù)的索引.

錯誤的例子:select from test where round(id)=10; 說明洽胶,此時id的索引已經(jīng)不起作用了

正確的例子:首先建立函數(shù)索引西采,create index test_id_fbiidx on test(round(id));然后 select * from test where round(id)=10; 這時函數(shù)索引起作用了

  1. 以下使用會使索引失效壹店,應(yīng)避免使用诺舔;

a. 使用 <> 奉狈、not in 卤唉、not exist、!=

b. like "%" 百分號在前(可采用在建立索引時用reverse(columnName)這種方法處理)

c. 單獨引用復(fù)合索引里非第一位置的索引列.應(yīng)總是使用索引的第一個列仁期,如果索引是建立在多個列上, 只有在它的第一個列被where子句引用時桑驱,優(yōu)化器才會選擇使用該索引。
d. 字符型字段為數(shù)字時在where條件里不添加引號.
e. 當(dāng)變量采用的是times變量跛蛋,而表的字段采用的是date變量時.或相反情況熬的。

  1. 不要將空的變量值直接與比較運算符(符號)比較。

如果變量可能為空赊级,應(yīng)使用 IS NULL 或 IS NOT NULL 進行比較押框,或者使用 ISNULL 函數(shù)。

  1. 不要在 SQL 代碼中使用雙引號此衅。

因為字符常量使用單引號强戴。如果沒有必要限定對象名稱,可以使用(非 ANSI SQL 標(biāo)準(zhǔn))括號將名稱括起來挡鞍。

  1. 將索引所在表空間和數(shù)據(jù)所在表空間分別設(shè)于不同的磁盤chunk上骑歹,有助于提高索引查詢的效率。

  2. Oracle默認(rèn)使用的基于代價的SQL優(yōu)化器(CBO)非常依賴于統(tǒng)計信息墨微,一旦統(tǒng)計信息不正常道媚,會導(dǎo)致數(shù)據(jù)庫查詢時不使用索引或使用錯誤的索引。

一般來說,Oracle的自動任務(wù)里面會包含更新統(tǒng)計信息的語句最域,但如果表數(shù)據(jù)發(fā)生了比較大的變化(超過20%),可以考慮立即手動更新統(tǒng)計信息谴分,例如:analyze table abc compute statistics,但注意镀脂,更新 統(tǒng)計信息比較耗費系統(tǒng)資源牺蹄,建議在系統(tǒng)空閑時執(zhí)行。

  1. Oracle在進行一次查詢時薄翅,一般對一個表只會使用一個索引.

因此沙兰,有時候過多的索引可能導(dǎo)致Oracle使用錯誤的索引,降低查詢效率翘魄。例如某表有索引1(Policyno)和索引2(classcode)鼎天,如果查詢條件為policyno = ‘xx’ and classcode = ‘xx’,則系統(tǒng)有可能會使用索 引2暑竟,相較于使用索引1斋射,查詢效率明顯降低。

  1. 優(yōu)先且盡可能使用分區(qū)索引但荤。

如果文章對您有幫助罗岖,請記得點贊關(guān)注喲~
歡迎大家關(guān)注我的公眾號<情系IT>,每日推送技術(shù)文章供大家學(xué)習(xí)參考纱兑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呀闻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子潜慎,更是在濱河造成了極大的恐慌捡多,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铐炫,死亡現(xiàn)場離奇詭異垒手,居然都是意外死亡,警方通過查閱死者的電腦和手機倒信,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門科贬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鳖悠,你說我怎么就攤上這事榜掌。” “怎么了乘综?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵憎账,是天一觀的道長。 經(jīng)常有香客問我卡辰,道長胞皱,這世上最難降的妖魔是什么邪意? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮反砌,結(jié)果婚禮上雾鬼,老公的妹妹穿的比我還像新娘。我一直安慰自己宴树,他們只是感情好策菜,可當(dāng)我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著森渐,像睡著了一般做入。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上同衣,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天,我揣著相機與錄音壶运,去河邊找鬼耐齐。 笑死,一個胖子當(dāng)著我的面吹牛蒋情,可吹牛的內(nèi)容都是我干的埠况。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼棵癣,長吁一口氣:“原來是場噩夢啊……” “哼辕翰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起狈谊,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤喜命,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后河劝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體壁榕,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年赎瞎,在試婚紗的時候發(fā)現(xiàn)自己被綠了牌里。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡务甥,死狀恐怖牡辽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情敞临,我是刑警寧澤态辛,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站哟绊,受9級特大地震影響因妙,放射性物質(zhì)發(fā)生泄漏痰憎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一攀涵、第九天 我趴在偏房一處隱蔽的房頂上張望铣耘。 院中可真熱鬧,春花似錦以故、人聲如沸蜗细。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炉媒。三九已至,卻和暖如春昆烁,著一層夾襖步出監(jiān)牢的瞬間吊骤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工静尼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留白粉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓鼠渺,卻偏偏與公主長得像鸭巴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拦盹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容