所以我使用以下查询
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
答案 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