Ho il requisito per cercare diverse tabelle nel mio database SQL Server. E ho bisogno di ordinare i risultati in base a quale tabella si è verificata la corrispondenza.Ottimizza ricerca full-text su più tabelle
L'approccio che ho preso è mostrato di seguito. Tuttavia, questo non sembra molto efficiente in quanto aumenta la quantità di dati.
Qualcuno può suggerire qualche trucco per ottimizzare questo?
-- Full-text query
DECLARE @FtsQuery nvarchar(100)
SET @FtsQuery = 'FORMSOF(INFLECTIONAL, detail)'
-- Maximum characters in description column
DECLARE @MaxDescription int
SET @MaxDescription = 250
SELECT 1 AS RankGroup, FTS.Rank, Id, Title, LEFT([Description], @MaxDescription) AS Description FROM Table1
INNER JOIN CONTAINSTABLE(Table1, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table1.Id
UNION SELECT 2, FTS.Rank, Id, Title, NULL FROM Table2
INNER JOIN CONTAINSTABLE(Table2, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table2.Id
UNION SELECT 3, FTS.Rank, Id, Title, LEFT([Description], @MaxDescription) FROM Table3
INNER JOIN CONTAINSTABLE(Table3, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table3.Id
UNION SELECT 4, FTS.Rank, Id, Title, LEFT([Description], @MaxDescription) FROM Table4
INNER JOIN CONTAINSTABLE(Table4, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table4.Id
UNION SELECT 5, FTS.Rank, Id, Title, LEFT([Description], @MaxDescription) FROM Table5
INNER JOIN CONTAINSTABLE(Table5, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table5.Id
ORDER BY RankGroup, Rank DESC
Un'idea che ho considerato è quella di creare una vista indicizzata e quindi eseguire la ricerca sulla vista. Ma dal momento che la vista avrebbe bisogno di questi UNION
s, è difficile vedere come sarebbe più efficiente.
Una semplice ottimizzazione che è possibile eseguire in sicurezza è sostituire 'UNION' con' UNION ALL'. Per maggiori informazioni: http://stackoverflow.com/questions/49925/what-is-the-difference-between-union-and-union-all – niaher