0

所以我经常使用以下查询

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
4

1 回答 1

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

您还可以索引您的 temptable 以便在使用时更好地搜索

CREATE NONCLUSTERED INDEX IDX_ID ON #temptable(id)  

希望这可以帮助 :)

* *编辑

根据上面的查询使用 temptable

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
于 2013-11-13T10:30:00.077 回答