在数据库中sql查询很快,但在程序中查询较慢的解决方法

在写java的时候,有一个方法查询速度比其他方法慢很多,但在数据库查询很快,原来是因为程序中使用参数化查询时参数类型错误的原因

 1          select *
 2            from TransactionNo,
 3                 fmis_AccountRecord AccountRecord,
 4                 UserInfo InputUser,
 5                 UserInfo CheckUser,
 6                 transspecialoperation a,
 7                 AccountInfo c
 8           where InputUser.ID(+) = TransactionNo.nInputUserID
 9             and CheckUser.ID(+) = TransactionNo.nCheckUserID
10             and TransactionNo.id(+) = AccountRecord.nTransactionNoID
11             and a.nTransactionNoID = TransactionNo.ID
12             and AccountRecord.nDirectionID = 2
13             and AccountRecord.nOfficeID = 1
14             and AccountRecord.nCurrencyID = 1
15             and a.npayaccountid = c.ID(+)18             and AccountRecord.dtExecute between ? and ?
21             and nvl(AccountRecord.nStatusID, 0) >= 0
22             and TransactionNo.nTransactionTypeID = 559

修改后程序很快:

//                ps.setTimestamp(1, tsDateStart);
//                ps.setTimestamp(2, tsDateEnd);
                 ps.setDate(1, new java.sql.Date(tsDateStart.getTime()));
                 ps.setDate(2, new java.sql.Date(tsDateEnd.getTime()));

参考c#:

代码如下

string sql = "SELECT * FROM LIS_V_LABTESTSAMPLE WHERE PATIENT_ID=:P";
            HlsAccess.CommandText = sql;
            HlsAccess.Parameters.Clear();
            HlsAccess.Parameters.Add(":P", Oracle.DataAccess.Client.OracleDbType.Varchar2).Value = patId;

这里指定了参数的类型为varchar2,但是数据库确实number,这时就会造成字段类型错误导致了表扫描,最后导致查询速度慢。

原文地址:https://www.cnblogs.com/tashaxing/p/9217114.html

时间: 2024-11-07 23:25:37

在数据库中sql查询很快,但在程序中查询较慢的解决方法的相关文章

LINQ To SQL在N层应用程序中的CUD操作、批量删除、批量更新

原文:LINQ To SQL在N层应用程序中的CUD操作.批量删除.批量更新 0. 说明 Linq to Sql,以下简称L2S.    以下文中所指的两层和三层结构,分别如下图所示: 准确的说,这里的分层并不是特别明确:(1) 生成的DataContext(Linq t0 SQL Runtime)和Entity是放在一个文件中的,物理上不能切割开来:上图只是展示逻辑上的结构.(2) 拿上图右边的三层结构来说,鉴于第(1)点,UI层就可以跨越BusinessLogic层,直接访问L2S层,这可能

mysql 数据库数据迁移 The user specified as a definer ('root'@'%') does not exist 解决方法

从一个数据库数据迁移到本地localhost 程序在调用到数据库的视图时报错,直接在数据库中打开视图时也报错,类似: mysql 1449 : The user specified as a definer ('montor'@'%') does not exist 经查,是权限问题,解决办法: 运行:grant all privileges on *.* to [email protected]"%" identified by "."; 之后打开视图时便不会报错

[php错误]PHP中Notice: unserialize(): Error at offset of bytes in on line 的解决方法

使用unserialize函数将数据储存到数据库的时候遇到了这个报错, 后来发现是将gb2312转换成utf-8格式之后, 每个中文的字节数从2个增加到3个之后导致了反序列化的时候判断字符长度出现了问题, 所以需要使用正则表达式将序列化的数组中的表示字符长度的值重新计算一遍,代码如下: function mb_unserialize($serial_str) { $out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen(

SQL Server 2008 用户SA登录失败(错误18456)之图文解决方法

SQL2008无法连接到.\SQLEXPRESS,用户'sa'登录失败(错误18456)图文解决方法 出现问题 : 标题: 连接到服务器 ------------------------------ 无法连接到 .\SQLEXPRESS. ------------------------------ 其他信息: 用户 'sa' 登录失败. (Microsoft SQL Server,错误: 18456) 解决方法: 1.打开数据库——用Windows身份登录数据库 02.登录名——双击sa(打开

安装网站时出现“连接数据库出现数据库服务器或登录密码无效,无法连接数据库,请重新设定”解决方法

在安装织梦网站时出现  "连接数据库出现数据库服务器或登录密码无效,无法连接数据库,请重新设定" 但是数据库用户名和密码是正确的,在服务器端完全可以进入到数据库的. 于是关闭php的sql安全模式. 把PHP.INI 里面的 sql.safe_mode = on  改成 sql.safe_mode = off   就可以了. 安装网站时出现"连接数据库出现数据库服务器或登录密码无效,无法连接数据库,请重新设定"解决方法

SQL Server 用户'sa'登录失败(错误18456)图文解决方法

SQL2008 用户'sa'登录失败(错误18456)图文解决方法 SQL2008无法连接到.\SQLEXPRESS,用户'sa'登录失败(错误18456)图文解决方法 出现问题 : 标题: 连接到服务器 ------------------------------ 无法连接到 .\SQLEXPRESS. ------------------------------ 其他信息: 用户 'sa' 登录失败. (Microsoft SQL Server,错误: 18456) 解决方法: 1.打开数据

NDK开发中出现各种Semantic Error“XXX 'xxx' could not be resolved”的解决方法

项目要求NDK开发App程序,于是import了工程项目,搭好了环境,结果出现各种 Type 'xxx' could not be resolved Method 'xxx' could not be resolved 等等Semantic Error.但是工程本身并不存在错误,可以成功编译. 解决方法:明显是没有包含各种头文件造成的,<jni.h>这些头文件包含进工程即可. 右键工程->Properties->C/C++ General->Paths and Symbols

eclipse 中提示tomcat 的端口被占用了 后的最快捷解决方法

很多时候运行tomcat 的时候总是会提示tomcat 的端口呗占用 但是任务管理器里面还找不到是哪个端口被占用了 因此很多人就重新配置tomcat  或者去修改tomcat的端口号 ,其实这么做太麻烦了 ,小弟在这里告诉你一个非常简单的方法. 1.在开始菜单中选择运行  然后输入cmd  进入DOS界面.显示如下: 2.在Dos窗口中输入netstat   -ano|findstr  8080(注意的 我的透明cat 的断口号 是8080 你的断口号是多少就写多少) 输入完成后回车 会弹出下面

mysql数据库出现2003-Can&#39;t connect to MySQL server on &#39;localhost&#39; (10061)的解决方法

1.右键点击我的电脑,找到管理! 2.找到服务和应用程序: 3.打开找到服务,打开: 4.在服务里找到MySQL,改成启动: mysql数据库出现2003-Can't connect to MySQL server on 'localhost' (10061)的解决方法

在WSL中安装swool报错 error: unrecognized command line option &#39;-V&#39; 的解决方法

Windows Subsystem for Linux Ubuntu中使用pecl安装swool时遇到错误"error: C compiler cannot create executables"."error: unrecognized command line option '-V'" 解决方法 先看解决方法, 将gcc版本降低到4.8即可,因为高版本gcc取消了-V参数: sudo apt install gcc-4.8 -y sudo update-alte