索引问题SQL codeSQL select * from user_ind_columns where table_nameC01DINDEX_NAMETABLE_NAMECOL
索引问题
- SQL code
SQL> select * from user_ind_columns where table_name='C01D';INDEX_NAME TABLE_NAME COLUMN_NAME COLUMN_POSITION COLUMN_LENGTH CHAR_LENGTH DESCEND------------------------------ ------------------------------ -------------------------------------------- --------------- ------------- ----------- -------IND_C01D12 C01D C01D12 1 22 0 ASCIND_C01D_C0109 C01D C01D09 1 6 6 ASCIND_C01D_C0126 C01D C01D26 1 6 6 ASCIND_C01D_C0133 C01D C01D33 1 8 8 ASCIND_C01D_C0165 C01D C01D65 1 6 6 ASCSYS_C003420 C01D C01D00 1 2 2 ASCSYS_C003420 C01D C01D01 2 8 8 ASC7 rows selected
怎么回出来两个索引一样的名字呢? 而且查询的时候走的全表
select * from c01d where c01d00='13'
SELECT STATEMENT, GOAL = CHOOSECost=2601Cardinality=52068Bytes=11090484
TABLE ACCESS FULLObject owner=FZDCObject name=C01DCost=2601Cardinality=52068Bytes=11090484
但是。
select * from c01d where c01d01='13'
SELECT STATEMENT, GOAL = CHOOSECost=15Cardinality=4Bytes=852
TABLE ACCESS BY INDEX ROWIDObject owner=FZDCObject name=C01DCost=15Cardinality=4Bytes=852
INDEX SKIP SCANObject owner=FZDCObject name=SYS_C003420Cost=13Cardinality=4
如果两个都用的话就是全表。。。怎么让两列索引都起到作用呢?
[解决办法]
- SQL code
SQL> create index my_test_ind on TEST_DISTINCT_TAB(name1,name2);索引已创建。SQL> select index_name,table_name from user_ind_columns where table_name='TEST_DISTINCT_TAB';INDEX_NAME TABLE_NAME------------------------------ ------------------------------MY_TEST_IND TEST_DISTINCT_TABMY_TEST_IND TEST_DISTINCT_TAB
[解决办法]
- SQL code
SQL> select * from test_distinct_tab where name2='ss';未选定行执行计划---------------------- 0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=8 Card=1 Bytes=24) 1 0 TABLE ACCESS (FULL) OF 'TEST_DISTINCT_TAB' (TABLE) (Cost=8 Card=1 Bytes=24)SQL> select * from test_distinct_tab where name1='ss';未选定行执行计划---------------------- 0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=0 Card=1 Bytes=24) 1 0 INDEX (RANGE SCAN) OF 'MY_TEST_IND' (INDEX)
[解决办法]
学习学习 。
[解决办法]
可以强制使用索引:
select /*+index(c01d SYS_C003420)*/ * from c01d where c01d00='13'
