高效的TSQL查询

Dew*_*Sql 0 t-sql sql-server-2008

有没有更有效的方法来编写这个SQL查询?

它在大约45秒内从一组100,000行返回大约800行.

我正在使用Sql Server 2008 R2

Select a.Div as Division
      ,a.Room as RoomLocation
      ,a.Form as Forms
      ,a.Nums as TotalNumberLocations
From AView a
Where a.Id = '1'
And a.Div = 'A'
Group By a.Div, a.Nums, a.Room, a.Form

union

Select b.Div as Division
      ,b.Room as RoomLocation
      ,b.Form as Forms
      ,b.Nums as TotalNumberLocations
From AView b
Where b.Id = '1'
And b.Div = 'G'
Group By b.Div, b.Nums, b.Room, b.Form

union

Select c.Div as Division
      ,c.Room as RoomLocation
      ,c.Form as Forms
      ,c.Nums as TotalNumberLocations
From AView c
Where c.Id = '1'
And c.Div = 'R'
Group By c.Div, c.Nums, c.Room, c.Form
Order By Forms asc, TotalNumberLocations asc
Run Code Online (Sandbox Code Playgroud)

Gia*_*los 7

为什么在IN子句中可以使用UNION时使用UNION?你正在扫描桌子三次.

Select Div as Division
      ,Room as RoomLocation
      ,Form as Forms
      ,Nums as TotalNumberLocations
From AView 
Where Id = '1'
And Div IN ('A','G','R')
Group By Div, Nums, Room, Form
Order By Forms asc, TotalNumberLocations asc
Run Code Online (Sandbox Code Playgroud)

  • +虽然`DISTINCT`而不是'GROUP BY`可能更清楚. (5认同)
  • 这需要进行测试,我看到过`UNION`版本在SQL Server 2008中比`IN()`更快的情况. (2认同)