SQL Server lent sélectionnez à partir de la grande table

J'ai une table avec environ+ de 20 millions de disques.

Structure ressemble à:

EventId UNIQUEIDENTIFIER
SourceUserId UNIQUEIDENTIFIER
DestinationUserId UNIQUEIDENTIFIER
CreatedAt DATETIME
TypeId INT
MetaId INT

Table reçoit environ 100k+ enregistre chaque jour.

J'ai index sur chaque colonne, à l'exception MetaId, comme il n'est pas utilisé dans le " où " clauses

Le problème est quand je veux ramasser par exemple. dernière 100 enregistrements d'SourceUserId

Requête prend parfois jusqu'à 4 minutes à s'exécuter, ce qui n'est pas acceptable.

Par exemple.

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

Je ne peux pas faire de partitionnement etc que je suis en utilisant la version Standard de SQL Server et de l'Entreprise est trop cher.

Je pense aussi que le tableau est assez petit pour être que lente.

Je pense que le problème est avec la clause ORDER BY db doit passer par de beaucoup plus grand ensemble de données.

Toutes les idées comment le rendre plus rapide ?

Peut-être relationnel de la base de données n'est pas une bonne idée pour ce genre de données.

De données est toujours en cours ramassé commandé par CreatedAt DESC

Vous remercie pour la lecture.

PabloX

Vote pour celle-ci, comme je l'ai presque exactement le même problème!

OriginalL'auteur pablox | 2009-12-02