复制代码

为懒人提供无限可能,生命不息,code不止

人类感性的情绪,让我们知难行难
我思故我在
日拱一卒,功不唐捐
  • 首页
  • 前端
  • 后台
  • 数据库
  • 运维
  • 资源下载
  • 实用工具
  • 接口文档工具
  • 登录
  • 注册

oracle

【原创】Oracle某个表字段有索引却还是走全表扫描

作者: 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%,全表扫描比索引快)。