Tengo una tabla con más de 20 millones de registros.Selección lenta de SQL Server de la tabla grande
estructura es como:
EventId UNIQUEIDENTIFIER
SourceUserId UNIQUEIDENTIFIER
DestinationUserId UNIQUEIDENTIFIER
CreatedAt DATETIME
TypeId INT
MetaId INT
tabla está recibiendo aproximadamente 100 k + registra cada día.
que tienen índices en cada columna excepto MetaId, ya que no se utiliza en 'dónde' cláusulas
El problema es cuando quiero recoger por ejemplo. los últimos 100 registros para SourceUserId deseada
La consulta a veces tarda hasta 4 minutos en ejecutarse, lo que no es aceptable.
Por ejemplo.
SELECT TOP 100 * FROM Events WITH (NOLOCK)
WHERE SourceUserId = '15b534b17-5a5a-415a-9fc0-7565199c3461'
AND
(
TypeId IN (2, 3, 4)
OR
(TypeId = 60 AND SrcMemberId != DstMemberId)
)
ORDER BY CreatedAt DESC
No puedo hacer particiones, etc., ya que estoy usando la versión estándar de SQL Server y Enterprise es demasiado costosa.
También creo que la mesa es bastante pequeña para ser tan lenta.
Creo que el problema es con la cláusula ORDER BY ya que db debe pasar por un conjunto de datos mucho más grande.
¿Alguna idea de cómo hacerlo más rápido?
Quizás la base de datos relacional no sea una buena idea para ese tipo de datos.
de datos siempre se recogió ordenado por CreatedAt DESC
gracias por leer.
pablox
¡Votando esto, ya que tengo casi exactamente el mismo problema! –