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

問題は、テーブルに 1000 万行を超える行が含まれており、トラフの検索に約 20 ~ 40 分かかり、多くの時間を消費することです。

このテーブルは、一部のネットワーク プロトコルのリバース エンジニアリングに使用されるため、直接のユーザー入力によってのみアクセスされます。

検索時間を短縮するために、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 を使用するときに検索を改善するために、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 に答える