在我们的一个数据库中进行 SELECT 查询时,我们遇到了一些主要的性能问题。请参阅下面的简单程序和相关代码。
在代码中,ExecuteReader() 方法在返回 30K 记录的查询上执行大约 10 秒。迭代阅读器需要 2 分钟(即使我没有将数据泵入任何其他对象)。30k 行数据集的 2 分钟对我们来说是不可接受的,因为我们期望有数百万的数据集。
这里有什么对你们来说很突出的吗?希望您在 ODP.NET 和 PL/SQL 方面的经验可能会有所帮助。
create or replace PROCEDURE TRACKING_FETCH (
p_tracking_id IN NUMBER,
p_parent_id IN NUMBER,
p_media_id IN NUMBER,
p_custodian_id IN NUMBER,
p_return_cursor OUT SYS_REFCURSOR)
AS
BEGIN
OPEN p_return_cursor FOR
SELECT
*
FROM
tracking
WHERE
(tracking_id = p_tracking_id OR p_tracking_id = 0)
AND (parent_id = p_parent_id OR p_parent_id = 0)
AND (media_id = p_media_id OR p_media_id = 0)
AND (custodian_id = p_custodian_id OR p_custodian_id = 0);
END TRACKING_FETCH;
--
using (DataFactory command
= new DataFactory(dbConnection,
DatabaseType.Oracle,
CommandType.StoredProcedure,
"TRACKING_FETCH"))
{
command.AddInParameter("p_tracking_id", DbType.Int32, trackingid);
command.AddInParameter("p_parent_id", DbType.Int32, parentid);
command.AddInParameter("p_media_id", DbType.Int32, mediaid);
command.AddInParameter("p_custodian_id", DbType.Int32, custodianid);
using (var dr = command.ExecuteReader())
{
while (dr.Read())
{
//Do Things...
}
}
}
任何指导将不胜感激。