在SELECT之后保留表数据

时间:2013-11-13 10:23:17

标签: tsql sql-server-2012 ssms

所以我使用以下查询

SELECT [id]
      ,[date]
      ,[pcknum]
      ,[pcktype]
      ,[pckinfo]
      ,[pckuptime]
      ,[pckbyte]
      ,[pcktext]
  FROM [dbo].[RawLog]
  where pcktext like '%USER SC%' and pckinfo = 174 and not (pcktext like '%type=Dial%' or pcktext like '%type=VoicemailCollect%')
  order by date desc

问题是,该表包含超过10 mio的行,并且需要大约20-40分钟来搜索低谷,并且它消耗了大量时间。

该表仅由直接用户输入访问,因为它用于反向工程som网络协议。

我想知道,如果有一种方法可以创建一个SQL查询的保存状态,以减少搜索时间?

例如保存的查询状态

SELECT [id]
      ,[date]
      ,[pcknum]
      ,[pcktype]
      ,[pckinfo]
      ,[pckuptime]
      ,[pckbyte]
      ,[pcktext]
  FROM [dbo].[RawLog]
  where pcktext like '%USER SC%' and pckinfo = 174

我以后可以使用查询?

例如

SELECT [id]
      ,[date]
      ,[pcknum]
      ,[pcktype]
      ,[pckinfo]
      ,[pckuptime]
      ,[pckbyte]
      ,[pcktext]
  FROM table_savedstate_of_RawLog_USERSC
  where not (pcktext like '%type=Dial%' or pcktext like '%type=VoicemailCollect%')
  order by date desc

1 个答案:

答案 0 :(得分:1)

您可以为此

使用临时表
SELECT [id]
      ,[date]
      ,[pcknum]
      ,[pcktype]
      ,[pckinfo]
      ,[pckuptime]
      ,[pckbyte]
      ,[pcktext]
  into #temptable
  FROM [dbo].[RawLog]
  where pcktext like '%USER SC%' and pckinfo = 174 and not (pcktext like '%type=Dial%' and pcktext like '%type=VoicemailCollect%')
  order by date desc

通过这种方式,您可以访问#temptable

中已查询过的详细信息

例如

Select * from #temptable where id = 1

您还可以为您的临时表编制索引,以便在使用时更好地搜索

CREATE NONCLUSTERED INDEX IDX_ID ON #temptable(id)  

希望这有帮助:)

* *编辑

根据上面的查询使用临时表

SELECT [id]
      ,[date]
      ,[pcknum]
      ,[pcktype]
      ,[pckinfo]
      ,[pckuptime]
      ,[pckbyte]
      ,[pcktext]
  FROM #temptable
  where not (pcktext like '%type=Dial%' or pcktext like '%type=VoicemailCollect%')
  order by date desc