我已经被问到以下问题,当您想要改进存储过程性能时,您会看到什么?存储过程返回一些值并在其中有三个连接。 除了确保连接写得很好之外,还可以做些什么来使其性能更好?这是一个普遍的问题,没有提供任何代码。 任何想法?返回存储过程的SQL性能
回答
有很多的事情可以做,优化程序,但它听起来像是你的SQL语句是非常简单的。有些事情要注意:
- 内联函数。这些可能会导致SQL按行进行逐行评估并减慢速度
- 连接语句上的数据转换。这些可以防止索引被使用。
- 确保列被加入了/在where子句中被索引(对于大型数据集)
您可以检查出这个网站获取更多性能的技巧,但我想我介绍你最需要什么简单的语句:
检查连接中使用的表上的索引。特别是,连接索引中使用了哪些列?
示例 -
SELECT *
FROM SomeTable a
JOIN SomeOtherTable b on a.ItemId = b.ItemId
如果这些表很大,索引ItemId
两个表中通常会有助于性能提升不少。
如果您的查询有一个,您应该对WHERE
子句中使用的任何列执行相同的操作。
WHERE a.ProductId = @SomeVariableYouPassedToTheStoredProc
索引ProductId
可能有助于在这种情况下。
查询性能是你可以进入兔子洞的东西,但这是一个合理的(快速)开始的地方。
感谢指数,比我通常不能想其他任何事,他们都是查询具体,如使用TINYINT而不是INT等等,是不是? – sheidaei 2012-08-17 14:52:41
事实上,它是一个存储过程与它没有多大关系。优化里面的sql。
至于如何,所有常见的嫌疑犯,包括由那种认为你可以猜测出什么问题的eejit写的。
将proc中的sql复制到一个合适的工具中,并用Explain作为前缀以查看发生了什么。
所以它与返回值无关,对吧?你正在谈论存储过程本身的sql。 – sheidaei 2012-08-17 14:53:30
是的,以及它里面的SQL。实质上,所有的存储过程都是一个已命名和预编译的sql块,其中包含一些用于传入和传出值的修饰。 – 2012-08-17 15:40:23
我认为还有其他的选择。例如: 1.这些连接中的每一个都可以使用类似'and permited_used_name =(从user_list where选择user_name)'的限制条件。该值可以在过程启动过程中(我的意思是第一个过程字符串)派生一次,以避免许多类似查询超载数据库。 2.从Oracle11开始,您可以使用缓存结果将函数声明为函数(即函数计算一次,每次调用时都不重新计算),定义一组更改无效缓存的表。
在任何情况下,这个问题主要是针对数据库的。
有关Oracle11中的缓存很好的知识,你能否把我推荐给在线的好例子? – sheidaei 2012-08-17 14:51:18
- 1. SQL Server存储过程的返回值
- 2. 返回存储过程的结果sql
- 3. 的SQL Server存储过程的性能
- 4. 存储过程的性能选择SQL
- 5. 性能的LINQ VS SQL存储过程
- 6. SQL Server存储过程:返回
- 7. T-SQL存储过程返回表
- 8. SQL Server存储过程返回null
- 9. SQL Server存储过程返回'失败'
- 10. SQL-CLR存储过程不返回值
- 11. SQL Server存储过程城市返回
- 12. C#SQL存储过程 - 返回ID
- 13. SQL存储过程无法返回值
- 14. SQL Server - 存储过程性能问题
- 15. SQL Server存储过程性能问题
- 16. ADO.NET SQL Server select存储过程可能返回的行数
- 17. MS SQL:抑制存储过程中调用的存储过程的返回值
- 18. 存储过程返回空
- 19. 存储过程返回varchar
- 20. 返回存储过程值
- 21. 存储过程返回NULLS
- 22. 存储过程返回varchar
- 23. 存储过程返回表
- 24. 返回表存储过程
- 25. 存储过程返回null
- 26. 存储过程返回值
- 27. 返回BIGINT存储过程
- 28. 存储过程返回空
- 29. SQL Server存储过程存储返回值
- 30. Oracle存储过程性能
内联函数与游标不同吧?游标也在逐行编译。感谢您的网站,这是一个很好的来源 – sheidaei 2012-08-17 14:49:37
正确的,游标是循环数据的一种方式。内联函数只是在查询中计算数据的方法。如果您使用函数来计算where子句中的数据,然后将该计算与另一个值进行比较,那么很可能SQL不会使用索引,并且它可能必须一次一行地执行计算/比较,而不是按质量进行计算/比较。 – 2012-08-17 22:27:05