Verständnis, warum SQL-Abfrage so lange dauert

Ich habe eine ziemlich große SQL-Abfrage geschrieben. Unten ist eine Vereinfachung der Frage, die ich sehe.

SELECT * FROM dbo.MyTransactionDetails TDTL JOIN dbo.MyTransactions TRANS on TDTL.ID = TRANS.ID JOIN dbo.Customer CUST on TRANS.CustID = CUST.CustID WHERE TDTL.DetailPostTime > CONVERT(datetime, '2015-05-04 10:25:53', 120) AND TDTL.DetailPostTime < CONVERT(datetime, '2015-05-04 19:25:53', 120) 

Die MyTransactionDetails enthält ca. 7 Millionen Zeilen und MyTransactions hat ca. 300k Zeilen.

Die obige Abfrage dauert etwa 10 Minuten zu laufen, was verrückt ist. Alle Indizes wurden neu indiziert und es gibt einen Index auf allen ID-Spalten.

Nun, wenn ich die unten liegenden Zeilen zur WHERE-Klausel die Abfrage die Abfrage dauert etwa 1 Sekunde.

 AND TRANS.TransBeginTime > CONVERT(datetime, '2015-05-05 10:25:53', 120) AND TRANS.TransBeginTime < CONVERT(datetime, '2015-05-04 19:25:53', 120) 

Ich kenne den Inhalt der database und die TransBeginTime ist fast identisch mit der DetailPostTime so diese extra wo Klauseln sollte nicht viel mehr als die JOIN filtern.

Warum ist der Zusatz von diesen so viel schneller?

Das Problem ist, dass ich den Filter nicht auf TransBeginTime verwenden kann, da es nicht garantiert ist, dass das Transaktionsdetail am selben date veröffentlicht wird.

EDIT: Ich möchte auch hinzufügen, dass der Ausführungsplan sagt, dass 50% der time von MyTransactionDetails aufgenommen wird

Die im Plan (sowohl geschätzten als auch tatsächlichen) angegebenen Prozentsätze sind Schätzungen , die auf der Annahme basieren, dass die geschätzten Zeilenzahlen korrekt sind. Bei schlechten Fällen kann der Prozentsatz völlig falsch sein, auch wenn 1% tatsächlich 95% betragen kann.

Um herauszufinden, was tatsächlich geschieht, schalte "Statistik io" ein. Das wird Ihnen sagen, die logische I / O-Zählung pro Tabelle – und das zu bekommen, bedeutet in der Regel bedeutet, dass auch die time untergeht.

Sie können auch den tatsächlichen Plan betrachten, und es gibt eine Menge Dinge, die Langsamkeit verursachen können, wie Scans, Sorten, Key-Lookups, Spulen etc. Wenn Sie beide Statistik I / O und Ausführungsplan (vorzugsweise die tatsächliche xml, nicht nur das image) Es ist viel einfacher herauszufinden, was los ist