中超

四个语句帮你提高 SQL Server 的伸缩性(2)

2019-09-13 19:46:44来源:励志吧0次阅读

此方法虽然有效,但需要在 SQL 语句中额外添加一些代码。获得相同结果的另一方法是在 INSERT 之前使用 SET NOCOUNT ON 语句,并将 SELECT @@IDENTITY 语句放在表中的 FOR INSERT 触发器中,如下面的代码片段所示。这样,任何进入该表的 INSERT 语句都将自动返回 IDENTITY 值。 CREATE TRIGGER trProducts_Insert ON Products FOR INSERT ASSELECT @@IDENTITYGO

触发器只在 Products 表上发生 INSERT 时启动,所以它总是会在成功 INSERT 之后返回一个 IDENTITY。使用此技术,您可以始终以相同的方式在应用程序中检索 IDENTITY 值。 内嵌视图与临时表 某些时候,查询需要将数据与其他一些可能只能通过执行 GROUP BY 然后执行标准查询才能收集的数据进行联接。例如,如果要查询最新五个定单的有关信息,您首先需要知道是哪些定单。这可以使用返回定单 ID 的 SQL 查询来检索。此数据就会存储在临时表(这是一个常用技术)中,然后与 Products 表进行联接,以返回这些定单售出的产品数量: CREATE TABLE #Temp1 (OrderID INT NOT NULL, _OrderDate DATETIME NOT NULL)INSERT INTO #Temp1 (OrderID, OrderDate)SELECT TOP 5 o.OrderID, o.OrderDateFROM Orders o ORDER BY o.OrderDate DESCSELECT p.ProductName, SUM(od.Quantity) AS ProductQuantityFROM #Temp1 tINNER JOIN [Order Details] od ON t.OrderID = od.OrderIDINNER JOIN Products p ON od.ProductID = p.ProductIDGROUP BY p.ProductNameORDER BY p.ProductNameDROP TABLE #Temp1

这些 SQL 语句会创建一个临时表,将数据插入该表中,将其他数据与该表进行联接,然后除去该临时表。这会导致此查询进行大量 I/O 操作,因此,可以重新编写查询,使用内嵌视图取代临时表。内嵌视图只是一个可以联接到 FROM 子句中的查询。所以,您不用在 tempdb 中的临时表上耗费大量 I/O 和磁盘访问,而可以使用内嵌视图得到同样的结果: SELECT p.ProductName,SUM(od.Quantity) AS ProductQuantityFROM (SELECT TOP 5 o.OrderID, o.OrderDateFROM Orders oORDER BY o.OrderDate DESC) tINNER JOIN [Order Details] od ON t.OrderID = od.OrderIDINNER JOIN Products p ON od.ProductID = p.ProductIDGROUP BYp.ProductNameORDER BYp.ProductName

孩子消化不良会积食怎么办
宝宝脾虚吃什么药
糖尿病胃轻瘫便秘的治疗方法
幼儿咳嗽吃什么药效果好
分享到: