我一直听说并相信存储过程是SQL数据库的核心,它们是用于多种用途的最佳对象。许多人甚至使用存储过程而不是触发器。在我的Delphi应用程序中,我查询一个包含20.000+行的表,每行包含大约20列。当我使用存储过程执行此操作时,加载大约需要3秒钟,但如果我使用查询则需要不到一秒钟。这非常重要,因为该表将容纳超过一百万条记录。我需要选择最佳的最佳方式,因为我确信当桌子满了很多记录时,它永远不会少于10秒。为什么存储过程比ad hoc查询花费的时间更长。
答案 0 :(得分:4)
存储过程通常是首选,因为它们可以促进更好的代码组织,并且因为它们使DBA和数据库开发人员更容易优化代码。但是,如果您的存储过程只是打开并返回SYS_REFCURSOR
而不是发出相同SQL语句的应用程序,那么性能应该没有区别。
SYS_REFCURSOR
并返回吗?或者它正在做其他事情?答案 1 :(得分:4)
总是你必须首先使用存储过程来完成繁重的工作,因为有许多优点,比如在服务器端运行并使用服务器资源(Fast HDD,CPU和Memory),减少网络流量使用。例如,如果您需要对大量记录进行复杂计算,则可以编写存储过程来解析任务,而不是检索数据集并在应用程序中自行处理。
注意:当您说...In my Delphi application I query a table with 20.000+ rows
时,我真的希望您没有将+20.000记录带到您的应用程序中,因为这不是有效的方法(相反,您必须过滤您的记录,添加具有适当条件的Where子句或你可以使用分页方法)
现在关于你特别提出一些想法
为了给你提供替代方案,你必须提供更多信息,例如你正在使用的SQL组件,一个示例sql语句,并指出你是否正在检索你的应用程序中的所有记录。
答案 2 :(得分:3)
我已经使用Oracle超过8年了,以下工作非常适合管理性能,我有几个表有超过一百万行:
create index idxname on tablename(trunc(datefield));