首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

索引有关问题

2012-01-08 
索引问题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'


热点排行
Bad Request.