我被问到以下问题,当您想要提高存储过程性能时,您会考虑什么?存储过程返回一些值,并在其中有三个连接。 除了确保连接写得很好,人们可以做些什么来使它表现更好?这是一个普遍的问题,没有提供任何代码。 有什么想法吗?
答案 0 :(得分:2)
检查连接中使用的表的索引。特别是,连接中使用的列是否已编入索引?
示例 -
SELECT *
FROM SomeTable a
JOIN SomeOtherTable b on a.ItemId = b.ItemId
如果这些表很大,两个表中的索引ItemId
通常会有很大的帮助。
如果您的查询中有一个列,则应对WHERE
子句中使用的任何列执行相同的操作。
WHERE a.ProductId = @SomeVariableYouPassedToTheStoredProc
在这种情况下,索引ProductId
可能有所帮助。
查询性能是你可以进入兔子洞的东西,但这是一个合乎逻辑(和快速)的起点。
答案 1 :(得分:0)
这是一个存储过程与它几乎无关的事实。优化里面的sql。
关于如何,所有通常的嫌疑人,包括那些认为你可以猜到什么是错的eejit写的。
将sql从proc复制到一个合适的工具中,在Explain前面加上解释,看看发生了什么。
答案 2 :(得分:0)
我认为还有其他选择。例如: 1.每个连接都可以使用看起来像'和permited_used_name =(从user_list中选择user_name)'的限制条件。在程序启动期间(我的意思是第一个程序字符串),可以通过许多类似的查询来重载数据。 2.从Oracle11开始,您可以将函数声明为具有缓存结果的函数(即函数计算一次,每次调用时不重新计算)定义一组更改无效缓存的表。
无论如何,问题主要是针对特定数据库的。
答案 3 :(得分:0)
在SQL语句
上运行查询分析器答案 4 :(得分:0)
您可以做很多事情来优化程序,但听起来您的SQL语句非常简单。有些事需要注意:
您可以查看此网站以获取更多性能提示,但我认为我涵盖了简单陈述所需的大部分内容: