在数据库中sql查询很快,但在程序中查询较慢的解决方法
Posted 溪山晴雪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在数据库中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,这时就会造成字段类型错误导致了表扫描,最后导致查询速度慢。
以上是关于在数据库中sql查询很快,但在程序中查询较慢的解决方法的主要内容,如果未能解决你的问题,请参考以下文章
在SQL Server数据库中执行存储过程很快,在c#中调用很慢的问题