Estoy tratando de entender el rendimiento de una consulta de texto completo de SQL Server 2008 que estoy construyendo.Consulta de texto completo de SQL Server en varias tablas: ¿por qué tan lento?
La siguiente consulta, utilizando un índice de texto completo, devuelve los resultados correctos de inmediato:
SELECT
O.ID, O.Name
FROM
dbo.EventOccurrence O
WHERE
FREETEXT(O.Name, 'query')
es decir, todos los EventOccurrences con la palabra 'consulta' en su nombre. Y la consulta siguiente, que utiliza un índice de texto completo de una tabla diferente, también vuelve inmediatamente:
SELECT
V.ID, V.Name
FROM
dbo.Venue V
WHERE
FREETEXT(V.Name, 'query')
es decir. todas las Sedes con la palabra 'consulta' en su nombre. Pero si trato de unir las tablas y hacer las dos consultas de texto a la vez, 12 segundos para volver:
SELECT
O.ID, O.Name
FROM
dbo.EventOccurrence O
INNER JOIN dbo.Event E ON O.EventID = E.ID
INNER JOIN dbo.Venue V ON E.VenueID = V.ID
WHERE
FREETEXT(E.Name, 'search')
OR FREETEXT(V.Name, 'search')
Aquí es el plan de ejecución: http://uploadpad.com/files/query.PNG
ACTUALIZACIÓN: el plan de texto formulario:
|--Nested Loops(Left Semi Join, OUTER REFERENCES:([E].[ID], [V].[ID]))
|--Hash Match(Inner Join, HASH:([E].[ID])=([O].[EventID]))
| |--Hash Match(Inner Join, HASH:([V].[ID])=([E].[VenueID]))
| | |--Clustered Index Scan(OBJECT:([iScene].[dbo].[Venue].[PK_Venue] AS [V]))
| | |--Clustered Index Scan(OBJECT:([iScene].[dbo].[Event].[PK_Event] AS [E]))
| |--Clustered Index Scan(OBJECT:([iScene].[dbo].[EventOccurrence].[PK_EventOccurrence] AS [O]))
|--Concatenation
|--Table-valued function
|--Table-valued function
de mi lectura, yo no creía que fuera posible incluso hacer una consulta de texto libre a través de varias tablas de esta manera, así que no estoy seguro de que estoy entendiendo esto correctamente.
Tenga en cuenta que si elimino la cláusula WHERE de esta última consulta, a continuación, devuelve todos los resultados en un segundo, por lo que es definitivamente el texto completo que está causando el problema aquí.
¿Alguien puede explicar (i) por qué esto es tan lento y (ii) si esto es incluso compatible/si incluso estoy entendiendo esto correctamente.
Gracias de antemano por su ayuda.
Puede publicar el plan real. No es la imagen? –
OK acaba de agregarlo para usted. –