web-dev-qa-db-fra.com

Spill du match de hachage

J'ai un matrice de hachage de matricule allant ici. J'ai mis à jour les statistiques avec FullScan sur les tables impliquées, de sorte que ce n'est pas ça. Tous les pointeurs très appréciés.

https://www.brentozar.com/pastetheplan/?id=bkq1vjysm

Je suis sur SQL 2017 Enterprise, avec 64 Go de RAM.

2
sqlbanana

Compte tenu de la taille des données, il peut ne pas être possible d'éviter entièrement les déversements, mais vous pouvez faire des choses pour améliorer la requête.

  1. Assurez-vous que votre jointure et où les colonnes de clause sont des clés d'index NC
  2. Vous ne sélectionnez pas beaucoup de colonnes, alors n'ayez pas peur de les inclure pour créer des index couvrant
  3. Calculer le numéro de la ligne (RN) provoque une solution et un déversement, cela peut être envisagé indexation différente pour résoudre ce problème. Notez que l'expression que vous utilisez là-bas, DATEDIFF(day,s.COMPLETEDDATE,att.atd_date, Est également utilisé dans ...

NUTS

... Le prédicat non sargable que vous avez pour actual_day_difference (AND a.actual_day_difference BETWEEN -60 AND 90), Qui élimine les lignes de ~ 5mm à ~ 400k. Tout à fait une réduction qui peut aider la requête tôt.

Le problème est que l'ensemble du résultat défini pour DATEDIFF(day,s.COMPLETEDDATE,att.atd_date) doit être généré, puis filtré. Calculer des calculs tels que celui de la CTE, une table dérivée ou une vue non indexée ne les persiste pas. Consultez mon Q & A ici: Sargable où la clause pour deux colonnes de date .

enter image description here

Je ne sais pas s'il y a une relation entre attend et Study, mais il peut être utile d'utiliser une table Temp ou une vue indexée pour matérialiser l'expression pour le rendre sargable. Vous pouvez également explorer l'ajout et la remplacement d'une colonne supplémentaire à l'une des deux table contenant les données de date correspondantes.

Cela ouvrirait également des options d'indexation supplémentaires pour vous et la possibilité de matérialiser le ABS sur DATEDIFF aussi, si nécessaire.

Comme il s'agit pour SQL Server 2014, il peut être utile d'explorer index de colonne de colonne non cluster , ce qui réduirait probablement la douleur d'essayer de déterminer les indices de magasin de rangées appropriées et sont plus appropriés pour le plus grand style DW. Requêtes comme celle-ci.

J'espère que cela t'aides!

4
Erik Darling