【问题标题】:usual high resource utilizing statements in a stored procedure in sql server在 sql server 的存储过程中通常使用高资源的语句
【发布时间】:2011-01-19 14:14:30
【问题描述】:

我想知道在所有类型的语句中哪些 sql 语句通常资源利用和内存消耗很高,变量的设置,创建哈希表,条件语句,循环语句等。如果任何人都可以提供关于sql server的信息就更好了。

我认为这是一个非常广泛的声明,但如果有人能对此有所了解,那就太好了。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    请务必记住,SQL 只是一种高级语言,用于描述您想要的数据集以及如何处理它。它(故意)没有指定如何做任何事情。实际操作是诸如全表扫描、散列连接等之类的操作,这些操作将根据数据库的结构和内容有其自身的成本。 RDBMS 将选择执行哪些操作以执行您的查询,并使用优化器找出最佳方法。您可以在查询中为优化器添加提示(在 SQL Server 中,它们通常采用查询末尾的“选项”子句的形式),但除非您对数据库有深入的了解,否则这样做通常不是一个好主意因为优化器非常擅长它的工作。如果要查看优化器将对查询执行什么操作,请选择查询并在 SQL Server Management Studio 中按 ctrl+L。这不仅会告诉你它会做什么,还会告诉你它认为每个操作有多昂贵。如果您发现某个操作开销很大,并且您认为可以通过重组查询来避免或减少操作,那么这是一个很好的起点。

    这可能不是您想要的答案,但优化查询是一个值得自己研究的难题。但是,以下提示通常有助于构建更高效的查询:

    1. 要使用更少的内存,只选择您需要的列(即不要总是选择 *)。这在对包含大量行的表进行大型查询时会有所不同。
    2. 在可用的地方使用索引。在查询的 where 子句中经常出现的列上创建索引。特别是在主键和外键上创建索引。请记住,索引可能非常大,因此不要只是将它们作为垃圾邮件覆盖所有内容。
    3. 如果有一个列几乎总是用于过滤表,请在其上创建一个聚集索引。每个表只能有一个聚集索引。
    4. 有时向 where 子句添加额外的条件可以加快查询速度。例如,如果您的表有日期索引,并且您知道要查找的记录来自上个月,则按月份过滤将减少数据库必须使用其他条件筛选的行数。
    5. 使您的数据库统计信息保持最新。不严格与您的查询有关,但如果您定期运行数据库统计信息,它将帮助优化器为您的查询制定更好的计划。
    6. 研究优化器为您的所有查询制定的计划。感受一下每个表上的每个操作的成本。它不会使您的查询更快,但希望随着时间的推移它会让您编写更快的查询,特别是如果您在计划中搜索所有您不了解的内容;)

    希望对您有所帮助。

    【讨论】:

    • 感谢内部。执行计划对存储过程的执行和产生的成本有很好的了解。我还会记住编写高效查询的技巧。再次感谢..!! :)
    猜你喜欢
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    相关资源
    最近更新 更多