为懒人提供无限可能,生命不息,code不止
作者: whooyun发表于: 2017-03-26 10:04
sql语句
select COLUMN_NAME,NUM_DISTINCT,NUM_NULLS from dba_tab_columns where table_name=upper('channel_trans_order') and column_name=upper('bank_code');(第三方支付,支付渠道路由)
现象
bank_code虽然建了索引,但是oracle还是使用了全表扫描
解释
由于channel_trans_order表中bank_code字段中的值只有18个渠道的编码,多为重复数据,当某个渠道编码的数据占整个表的大部分时,oralce查询机制就会自动走全表扫描,此时在bank_code中创建索引作用不大 就算建立了oracle索引,如果你查询的数据量很大的话,也不一定会用索引,有时候oracle全表扫描速度比oralce索引扫描要快!(官方文档上好像说的是大概10%,就是如果你查询的数据占到总数据的10%,全表扫描比索引快)。