数据库字段值相似性高导致的索引问题
2018-02-27 13:32
218 查看
问题描述:表A是数据对接表,有800万左右的数据量,对字段a1加了normal索引,发现查询性能问题,分析后发现查询不走索引,强制走索引查询性能依然很差。分析后发现a1字段值类似递增的序列号,因此导致每行记录该字段的值都相差不大,虽然加了索引,但是索引树的层级将会增加很快,导致索引效果很不理想。这里提出几种解决方案:方案1:将A表改造成分区表,查询时定位到分区,通过缩小数据范围来提升查询性能。但是这种方式效果仍然不理想,因为索引依然不起作用,且800万数据量也没有必要使用分区表。方案2:在A表中新增加一个字段a1_md5,用来保存a1字段的md5值,对a1_md5创建索引,查询时传入条件使用md5函数进行运算。这种方式降低了索引树的层级,使得查询性能得到提升。方案3:创建函数索引 create index idx_A_a1_md5 on A(md5(a1)); 思路和方案2是一样的,都是降低索引树的层级来提升查询性能。但这种方案避免了新增字段,减少了代码修改量,节省了磁盘空间,最终公司也是采用了这种方案。
相关文章推荐
- Solr对数据库中的CLOB字段建立索引的问题
- 解决数据库字段导致的下拉列表回显失效问题
- CodeIgniter需要注意错写查询条件导致数据库索引失效的问题
- 用hibernate操作数据库时,由于字段名称设置问题导致报错
- Thinkphp新增字段无法插入到数据库问题
- 当Select语句有Where的范围条件以及Order By时的索引字段顺序问题
- 快速找出数据库的性能问题之:缺失索引 &无用的索引
- 关于数据库Varchar字段类型长度设计问题
- Oracle表空间文件损坏导致的数据库异常关闭并启动失败问题的解决方法
- ASM路径问题导致数据库不能正常启动 -- 报:ORA-03113: end-of-file on communication channel
- 解决误删datafile导致数据库无法启动的问题
- 小心数据库字段与关键字重复问题
- oracle数据库-表空间不一样导致blob等大字段导入失败问题
- 解决JS循环闭包导致索引始终为最后值的问题
- 解决poco与数据库表字段非一一对应的问题
- trouble shooting:ORA-01502:失效索引导致数据库报错
- ObjectARX中使用非模态对话框的问题(写数据库导致AutoCAD异常问题、刷新显示)
- 环境变量字符集和数据库字符集不一样导致的错误,EXP-00091: Exporting questionable statistics 问题处理方法
- 关于数据库Varchar字段类型长度设计问题(转载)
- 关于归档日志空间被占满而导致数据库down掉的问题