达梦数据库查询比oracle慢接近一百倍的原因!

前言

 

问题的产生 

实验室导师承接的项目本来开发是用Oracle数据库,后来项目进行到快结束的时候,甲方爸爸突然要求数据库必须换成国产的达梦数据库,在数据迁移过程中遇到了一些小麻烦,后面全部都顺利解决了。关于数据迁移遇到的问题及解决方案可以查看达梦数据库迁移工具的使用和Oracle数据库迁移达梦数据库的两种方法。数据迁移过程很简单,但是真正的使用已经写好的服务去调用的时候就比较麻烦了。在项目中使用的spring boot+jpa+mybatis框架,在将Oracle数据库替换成达梦数据库后,所有的查询都变得很慢慢很慢,放在系统中,各个部分的查询都是要么查询不出来,要么查询特别慢,在此过程中做很多的实验与尝试,也学习到了很多的知识。具体实验过程可以参考记一次从Oracle11g迁移数据到达梦8,引起的查询变慢几百倍的问题。

问题的原因

在做了很多尝试都没有效果之后,我们终于关注到了这个问题的具体原因。在Oracle数据库中,数据数据存储的类型有(NUMBER,INT,FLOAT)等,项目中的数据存储都是用的是NUMBER类型的,所以迁移过去之后数据类型仍然都是number类型的。我们使用的mybatis框架中,对于number类型的对应的jdbcType类型都是Double类型,因为Oracle中本来就是这样对应的。。所以问题就出现在了这里。。。

Mybatis与数据库的类型对应

达梦数据库查询比oracle慢接近一百倍的原因!_第1张图片

我们使用了java中的Double作为查询的输入,oracle的number对应的jdbcType是Double,而达梦恰好是不支持的,如果达梦数据库中存储的数据类型是number,而输入查询的是Double,这样达梦数据库就会进行数据转换,从而相当于运用了函数的样子?就会进行全表扫描,这样查询速率自然就比Oracle满了一两百倍。

解决办法

这样问题就很容易解决了。

第一种方法是更改数据库中的数据类型,不改代码,这样可能工作量小一点,将数据库表中的查询列的数据类型换为与代码相对应的数据类型,达梦官方并没有给出具体的jdbcType与数据库的数据类型相对应的表,大致可以参考mysql与mybatis数据类型对应。

第二种方法是修改代码,在number类型中,与之对应的我是用的Integer类型,这样就会走索引,查询速度立马就上来了。

在修改完之后,发现查询速度确实不错,国产的数据库做的也真的很不错,操作全中文且有图形界面也很人性化,吹一波彩虹屁!!

附springboot+mybatis连接达梦数据库配置

达梦数据库查询比oracle慢接近一百倍的原因!_第2张图片

你可能感兴趣的:(达梦数据库查询比oracle慢接近一百倍的原因!)