专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Oracle开发

索引有关问题

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
索引问题
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 ASC
IND_C01D_C0109                 C01D                           C01D09                                                                                         1             6           6 ASC
IND_C01D_C0126                 C01D                           C01D26                                                                                         1             6           6 ASC
IND_C01D_C0133                 C01D                           C01D33                                                                                         1             8           8 ASC
IND_C01D_C0165                 C01D                           C01D65                                                                                         1             6           6 ASC
SYS_C003420                    C01D                           C01D00                                                                                         1             2           2 ASC
SYS_C003420                    C01D                           C01D01                                                                                         2             8           8 ASC

7 rows selected



怎么回出来两个索引一样的名字呢? 而且查询的时候走的全表
select * from c01d where c01d00='13'
SELECT STATEMENT, GOAL = CHOOSE Cost=2601 Cardinality=52068 Bytes=11090484
 TABLE ACCESS FULL Object owner=FZDC Object name=C01D Cost=2601 Cardinality=52068 Bytes=11090484

但是。
select * from c01d where c01d01='13'
SELECT STATEMENT, GOAL = CHOOSE Cost=15 Cardinality=4 Bytes=852
 TABLE ACCESS BY INDEX ROWID Object owner=FZDC Object name=C01D Cost=15 Cardinality=4 Bytes=852
  INDEX SKIP SCAN Object owner=FZDC Object name=SYS_C003420 Cost=13 Cardinality=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_TAB
MY_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'
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: