drop table bind_is_bad; create table bind_is_bad (id number, name varchar2(200), surname varchar2(200)); declare ran varchar2(200); begin for i in 1..100000 loop ran:=dbms_random.string('l',200); insert into bind_is_bad values(i,ran,ran); insert into bind_is_bad values(100001,ran,ran); end loop; end; / create index idx_bind_is_bad_id on bind_is_bad(id,name); select table_name,num_rows,blocks,empty_blocks,last_analyzed from all_tables where table_name='BIND_IS_BAD'; select index_name, table_name, blevel, leaf_blocks, clustering_factor, num_rows, last_analyzed from all_indexes where index_name='IDX_BIND_IS_BAD_ID'; set autotrace traceonly explain; select * from bind_is_bad where id=1; select * from bind_is_bad where id=2; select * from bind_is_bad where id=100000; select * from bind_is_bad where id=100001; select /*+ INDEX(bind_is_bad idx_bind_is_bad_id) */ * from bind_is_bad where id=100001; set timing on declare TYPE test1_tab IS TABLE OF bind_is_bad%ROWTYPE; t_tab test1_tab; begin for i in 99999 .. 100001 loop execute immediate 'select * from bind_is_bad where id=:a' bulk collect into t_tab using i; end loop; end; / declare TYPE test1_tab IS TABLE OF bind_is_bad%ROWTYPE; t_tab test1_tab; begin for i in 99999 .. 100001 loop execute immediate 'select * from bind_is_bad where id='||i bulk collect into t_tab; end loop; end; /