索引總失效的原因

[原文地址:https://www.cnblogs.com/cxxjohnson/p/4951553.html]

今天一個同事突然問我索引為什么失效。說實在的埃儿,失效的原因有多種:

但是如果是同樣的sql如果在之前能夠使用到索引器仗,那么現(xiàn)在使用不到索引,以下幾種主要情況:

1. 隨著表的增長童番,where條件出來的數(shù)據(jù)太多精钮,大于15%,使得索引失效(會導致CBO計算走索引花費大于走全表)

2. 統(tǒng)計信息失效 需要重新搜集統(tǒng)計信息

  1. 索引本身失效 需要重建索引

下面是一些不會使用到索引的原因

索引失效

  1. 沒有查詢條件剃斧,或者查詢條件沒有建立索引
  2. 在查詢條件上沒有使用引導列
  3. 查詢的數(shù)量是大表的大部分轨香,應(yīng)該是30%以上。
  4. 索引本身失效
  5. 查詢條件使用函數(shù)在索引列上(見12)
  6. 對小表查詢
  7. 提示不使用索引
  8. 統(tǒng)計數(shù)據(jù)不真實
  9. CBO計算走索引花費過大的情況幼东。其實也包含了上面的情況臂容,這里指的是表占有的block要比索引小科雳。
    10)隱式轉(zhuǎn)換導致索引失效.這一點應(yīng)當引起重視.也是開發(fā)中經(jīng)常會犯的錯誤. 由于表的字段tu_mdn定義為varchar2(20),
    但在查詢時把該字段作為number類型以where條件傳給Oracle,這樣會導致索引失效.
    錯誤的例子:select * from test where tu_mdn=13333333333;
    正確的例子:select * from test where tu_mdn='13333333333';
    11)對索引列進行運算導致索引失效,我所指的對索引列進行運算包括(+,-策橘,*炸渡,/,! 等)
    錯誤的例子:select * from test where id-1=9;
    正確的例子:select * from test where id=10;
    12)使用Oracle內(nèi)部函數(shù)導致索引失效.對于這樣情況應(yīng)當創(chuàng)建基于函數(shù)的索引.
    錯誤的例子:select * from test where round(id)=10;
    說明丽已,此時id的索引已經(jīng)不起作用了 正確的例子:首先建立函數(shù)索引蚌堵,
    create index test_id_fbi_idx on test(round(id));
    然后 select * from test where round(id)=10; 這時函數(shù)索引起作用了 1,<> 2,單獨的>,<,(有時會用到,有時不會)
    3,like "%_" 百分號在前.
    4,表沒分析.
    5,單獨引用復合索引里非第一位置的索引列.
    6,字符型字段為數(shù)字時在where條件里不添加引號.
    7,對索引列進行運算.需要建立函數(shù)索引.
    8,not in ,not exist.
    9,當變量采用的是times變量沛婴,而表的字段采用的是date變量時.或相反情況吼畏。
    10, 索引失效。
    11,基于cost成本分析(oracle因為走全表成本會更小):查詢小表,或者返回值大概在10%以上
    12,有時都考慮到了 但就是不走索引,drop了從建試試在
    13,B-tree索引 is null不會走,is not null會走,位圖索引 is null,is not null 都會走
    14,聯(lián)合索引 is not null 只要在建立的索引列(不分先后)都會走,
    in null時 必須要和建立索引第一列一起使用,當建立索引第一位置條件是is null 時,
    其他建立索引的列可以是is null(但必須在所有列 都滿足is null的時候),
    或者=一個值嘁灯;當建立索引的第一位置是=一個值時,其他索引列可以是任何情況(包括is null =一個值),
    以上兩種情況索引都會走泻蚊。其他情況不會走。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丑婿,一起剝皮案震驚了整個濱河市性雄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌羹奉,老刑警劉巖秒旋,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诀拭,居然都是意外死亡迁筛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門耕挨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來细卧,“玉大人,你說我怎么就攤上這事筒占√懊恚” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵翰苫,是天一觀的道長插勤。 經(jīng)常有香客問我,道長革骨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任析恋,我火速辦了婚禮良哲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘助隧。我一直安慰自己筑凫,他們只是感情好滑沧,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巍实,像睡著了一般滓技。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棚潦,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天令漂,我揣著相機與錄音,去河邊找鬼丸边。 笑死叠必,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的妹窖。 我是一名探鬼主播纬朝,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼骄呼!你這毒婦竟也來了共苛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蜓萄,失蹤者是張志新(化名)和其女友劉穎隅茎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绕德,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡患膛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了耻蛇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踪蹬。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖臣咖,靈堂內(nèi)的尸體忽然破棺而出跃捣,到底是詐尸還是另有隱情,我是刑警寧澤夺蛇,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布疚漆,位于F島的核電站,受9級特大地震影響刁赦,放射性物質(zhì)發(fā)生泄漏娶聘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一甚脉、第九天 我趴在偏房一處隱蔽的房頂上張望丸升。 院中可真熱鬧,春花似錦牺氨、人聲如沸狡耻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夷狰。三九已至岭皂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沼头,已是汗流浹背爷绘。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瘫证,地道東北人揉阎。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像背捌,于是被迫代替她去往敵國和親毙籽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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