Advertisement

微软内部文档:SQL性能优化指南3

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:DOC


简介:
本指南深入探讨了如何在Microsoft SQL Server中实现高效的数据管理和查询执行。通过详尽的技术细节和实用建议,帮助开发者解决性能瓶颈问题,提升数据库操作效率。 第三课:触发器 本课程将介绍在SQL Server 7.0中使用触发器的注意事项。 ## 触发器概述 ### 触发器的基本用法 #### 创建示例表和数据: ```sql CREATE TABLE Orders (orderid int, orderdate datetime) GO INSERT INTO Orders VALUES(1,2005-3-4) GO ``` #### 插入触发器: ```sql CREATE TRIGGER trgOrdersInsert ON Orders FOR INSERT AS PRINT New Order Added GO -- 测试插入操作: INSERT INTO Orders VALUES (2, 2016-7-8) SELECT * FROM Orders ``` 执行上述代码后,将看到触发器被激活并打印消息。 #### 更新和删除触发器: ```sql CREATE TRIGGER trgOrdersUpdate ON Orders FOR UPDATE AS PRINT Order Updated GO -- 测试更新操作: UPDATE Orders SET orderdate = 2016-7-8 SELECT * FROM Orders ``` 执行上述代码后,将看到触发器被激活并打印消息。 #### 删除触发器: ```sql DROP TRIGGER trgOrdersInsert ON Orders GO ``` ### 触发器的限制 - **事务边界**:触发器不能跨越多个事务。 - **递归调用**:默认情况下,SQL Server不支持直接或间接地在同一个表上的同一类操作中多次执行相同的触发器。可以通过设置 `sp_settriggerorder` 来改变这一行为。 ### 多行操作的处理 当对包含多条记录的操作(如批量插入、更新)应用触发器时,必须确保代码能够正确应对这种情况。 ```sql CREATE TRIGGER trgOrdersInsert ON Orders FOR INSERT AS SELECT orderid, orderdate FROM inserted GO -- 测试批量插入: INSERT INTO Orders VALUES (3,2016-7-8),(4,2016-7-9) SELECT * FROM Orders ``` ### 触发器的调试 使用 `DBCC INPUTBUFFER` 和 `DBCC PSS` 命令来查看触发器被调用时执行的具体语句和堆栈信息。 ```sql -- 查看引发触发器的操作: DBCC inputbuffer(@@spid) -- 获取当前正在运行的批处理中的所有过程或存储过程: EXEC sp_pss @processID = @@SPID, @lineNumber = 0 ``` ### 触发器中错误信息的捕获 在触发器内部使用 `@@ERROR` 和 `RAISERROR` 来检查并报告错误。 ```sql CREATE TRIGGER trgOrdersInsert ON Orders FOR INSERT AS BEGIN TRY IF EXISTS(SELECT * FROM inserted WHERE orderdate > 2016-7-8) RAISERROR(Cannot insert orders with dates beyond July 8, 2016,16,1) END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS Severity, ERROR_STATE() AS State, ERROR_PROCEDURE() AS ProcedureName, ERROR_LINE() As LineNumber, ERROR_MESSAGE() As ErrorMessage; END CATCH ``` 通过上述示例,可以了解如何在SQL Server中创建、测试和调试触发器。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • SQL3
    优质
    本指南深入探讨了如何在Microsoft SQL Server中实现高效的数据管理和查询执行。通过详尽的技术细节和实用建议,帮助开发者解决性能瓶颈问题,提升数据库操作效率。 第三课:触发器 本课程将介绍在SQL Server 7.0中使用触发器的注意事项。 ## 触发器概述 ### 触发器的基本用法 #### 创建示例表和数据: ```sql CREATE TABLE Orders (orderid int, orderdate datetime) GO INSERT INTO Orders VALUES(1,2005-3-4) GO ``` #### 插入触发器: ```sql CREATE TRIGGER trgOrdersInsert ON Orders FOR INSERT AS PRINT New Order Added GO -- 测试插入操作: INSERT INTO Orders VALUES (2, 2016-7-8) SELECT * FROM Orders ``` 执行上述代码后,将看到触发器被激活并打印消息。 #### 更新和删除触发器: ```sql CREATE TRIGGER trgOrdersUpdate ON Orders FOR UPDATE AS PRINT Order Updated GO -- 测试更新操作: UPDATE Orders SET orderdate = 2016-7-8 SELECT * FROM Orders ``` 执行上述代码后,将看到触发器被激活并打印消息。 #### 删除触发器: ```sql DROP TRIGGER trgOrdersInsert ON Orders GO ``` ### 触发器的限制 - **事务边界**:触发器不能跨越多个事务。 - **递归调用**:默认情况下,SQL Server不支持直接或间接地在同一个表上的同一类操作中多次执行相同的触发器。可以通过设置 `sp_settriggerorder` 来改变这一行为。 ### 多行操作的处理 当对包含多条记录的操作(如批量插入、更新)应用触发器时,必须确保代码能够正确应对这种情况。 ```sql CREATE TRIGGER trgOrdersInsert ON Orders FOR INSERT AS SELECT orderid, orderdate FROM inserted GO -- 测试批量插入: INSERT INTO Orders VALUES (3,2016-7-8),(4,2016-7-9) SELECT * FROM Orders ``` ### 触发器的调试 使用 `DBCC INPUTBUFFER` 和 `DBCC PSS` 命令来查看触发器被调用时执行的具体语句和堆栈信息。 ```sql -- 查看引发触发器的操作: DBCC inputbuffer(@@spid) -- 获取当前正在运行的批处理中的所有过程或存储过程: EXEC sp_pss @processID = @@SPID, @lineNumber = 0 ``` ### 触发器中错误信息的捕获 在触发器内部使用 `@@ERROR` 和 `RAISERROR` 来检查并报告错误。 ```sql CREATE TRIGGER trgOrdersInsert ON Orders FOR INSERT AS BEGIN TRY IF EXISTS(SELECT * FROM inserted WHERE orderdate > 2016-7-8) RAISERROR(Cannot insert orders with dates beyond July 8, 2016,16,1) END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS Severity, ERROR_STATE() AS State, ERROR_PROCEDURE() AS ProcedureName, ERROR_LINE() As LineNumber, ERROR_MESSAGE() As ErrorMessage; END CATCH ``` 通过上述示例,可以了解如何在SQL Server中创建、测试和调试触发器。
  • Oracle SQL容全面)
    优质
    本课程全面讲解Oracle SQL性能优化技巧与策略,涵盖查询分析、索引使用、执行计划解读等内容,旨在提升数据库操作效率和性能。 本段落将介绍SQL语句执行的过程、ORACLE优化器的工作原理以及表之间的关联方式,并讲解如何获取和分析SQL执行计划等内容,通过由浅入深的方式帮助大家逐步掌握SQL优化的方法和技术。
  • SQL.pdf
    优质
    《SQL性能优化》是一本专注于提高数据库查询效率的技术书籍,涵盖了索引设计、查询分析及调优策略等内容,旨在帮助读者解决实际工作中的性能瓶颈问题。 SQL优化核心思想.pdf 这份文档主要探讨了如何提高SQL查询的效率和性能,涵盖了索引使用、查询语句编写技巧以及数据库设计等方面的知识。通过深入理解这些内容,可以帮助开发者更有效地管理数据库资源,并提升应用系统的响应速度与用户体验。
  • Hive SQL
    优质
    《Hive SQL优化指南》旨在帮助用户深入理解Hive查询语言,并提供实用技巧和策略以提高数据处理效率与性能。适合数据分析人员及工程师阅读。 本段落档提供了关于HiveSQL优化的整理内容,基于Hive2版本进行编写。主要内容涵盖数据倾斜处理、表结构优化、并行执行策略以及压缩技术的应用,并简要介绍了语法树的相关知识。
  • Oracle培训——SQL(适用于老方块培训班)
    优质
    本课程专为老方块内部员工设计,深入讲解Oracle SQL性能优化技巧,旨在帮助学员掌握高效查询与数据库管理方法。 本课程主要探讨SQL语句执行的过程、ORACLE优化器的作用、表之间的关联方式以及如何获取和分析SQL执行计划等内容。通过由浅入深的方式帮助大家逐步掌握SQL优化的方法和技术,使学员能够全面了解并应用SQL优化过程。 目录包括: - 优化基础知识 - 性能调整综述 - 有效的应用程序设计 - SQL语句的处理流程 - Oracle的优化器原理与使用方法 - 如何生成和解读Oracle执行计划 - 实施中的注意事项
  • SQL方案
    优质
    简介:本方案旨在提供一系列策略和技巧以提升SQL查询效率与数据库系统性能,涵盖索引设计、查询语句优化及资源管理等方面。 SQL优化方案——性能提升指南:包含52条SQL优化建议,助您的查询飞速运行。
  • PostgreSQL之慢查询调
    优质
    本文提供了一套针对PostgreSQL数据库中慢查询问题的优化策略和技巧,旨在帮助用户提升系统的响应速度与稳定性。 1. 直接创建索引 2. 修改条件以使用索引 3. 避免在where子句中对字段进行运算,以免查询规划器放弃使用index 4. 尽量避免在where子句中强制转换字段类型,导致查询规划器不使用index 5. 减少不必要的outer join和sub-query层级数【不影响结果正确性的前提下】 6. 避免select * 和冗余字段的使用 7. 表达式索引 8. 部分索引 9. 分解DDL(数据定义语言)语句以优化性能 10. 综合优化策略 11. 索引创建方法 12. 查找并删除无用的索引 13. 检测重复索引 14. 识别需要维护的索引,并自行编写索引维护SQL语句 15. 示例:一个index size影响query plan的情况
  • Unity全面手册.pdf
    优质
    《Unity全面性能优化指南手册》是一本详尽指导开发者如何提升Unity游戏引擎项目性能的专业书籍。书中涵盖了从资源管理到渲染技巧的各项优化策略,旨在帮助开发者打造更流畅、高效的互动体验。 Unity最全性能优化参考手册提供了全面的指导,帮助开发者提升游戏在Unity引擎中的表现。这份文档涵盖了从内存管理到渲染技术等多个方面的优化技巧,旨在让开发人员能够更好地利用资源并提高应用程序的整体效率。
  • Android[谷歌官方]-10211632
    优质
    本电子书由谷歌官方出品,详尽介绍了针对Android应用和设备进行性能优化的方法与技巧,旨在帮助开发者打造更高效、流畅的应用体验。 目录 - 性能优化典范 第一季 - 性能优化典范 第二季 - 性能优化典范 第三季 - Android性能优化之渲染篇 - Android性能优化之运算篇 - Android性能优化之内存篇 - Android性能优化之电量篇
  • Unity 顶字图标的
    优质
    本文将探讨如何在Unity引擎中对顶部文字图标进行有效的性能优化,提升游戏或应用的表现和用户体验。 Unity 头顶图文字性能优化可以通过以下几个方法实现:首先,尽量减少绘制的文本长度;其次,使用纹理代替复杂的文字效果可以提高渲染效率;再次,在可能的情况下避免实时更新头顶图的文字内容以减少不必要的计算开销;最后,合理利用 Unity 的图形API 和 Shader 来进一步提升性能。