已建索引執行計畫為何不走索引?

2022-05-13 14:44:10 字數 1376 閱讀 5386

drop index scott.idx_uni_emp;

create index scott.idx_emp_1 on scott.employee (employee_id);

--select

*from

scott.employee

where

employee_id = 100;

select

*from

table (

dbms_xplan.display_cursor (null, null, 'advanced')

);--

truncate table scott.employee;

begin

for i in 1 .. 5000 loop 

insert into scott.employee

values

('f', i) ;

end loop ; 

commit ;

end ;

/begin

for i in 5001 .. 10000 loop 

insert into scott.employee

values

('m', i) ;

end loop ; 

commit ;

end ;/--

select

gender,

count (*)

from

scott.employee

group by

gender;

exec dbms_stats .gather_table_stats(ownname=>'scott',tabname=>'employee',estimate_percent=>100,cascade=>true,method_opt=>'for all columns size 1',no_invalidate=>false);

set autot trace 

--select

employee_id

from

scott.employee;

--強制也不走

select

/*+ index(employee idx_emp_1) */

employee_id

from

scott.employee;

為什麼?

索引idx_emp_1是個單鍵值b樹索引,因此null值不會儲存其中,但是一旦employee_id有了null(儘管此實驗沒有null),此索引會跳過null,導致執行結果不對,執行計畫就有可能不會走,因此選擇走全表掃瞄

處理辦法:alter table scott.employee modify (employee_id not null);

mysql,explain執行計畫組合索引測試

create table users id int 11 not null,name varchar 255 default null,age int 11 default null,manager id int 11 default null,primary key id key idex nam...

MySQL索引和執行計畫

索引 index 是幫助mysql高效獲取資料的資料結構。可以得到索引的本質 索引是資料結構 右側是資料表,一共有兩列七條記錄,最左邊的是資料記錄的實體地址 show index from table namecreate unique index indexname on mytable colu...

Mysql 索引和執行計畫

平衡二叉樹示意圖。聚簇索引 輔助索引 單列索引 聯合索引 i ndex a,b,c 查詢條件一定要帶a才能走索引 最左列 字首索引 由於索引列,字元太長,占用空間太大,索引樹高度增高。查詢時需要檢索更多的索引也。mysql中建議3,4層。所以可以選擇大字段的前部分作索引。2.資料庫行過多 1.索引欄...