2017-09-25 1 views
0

Ich habe gelesen, dass, wenn die Datensätze im Papierkorb zu viele sind, um die aus Abfragen gelöschten Datensätze auszuschließen, die Bedingung "where isDeleted = false" verwendet werden kann. Aber in meinem Batch, der die Zeiten überwacht, ist die Abfrage viel langsamer als die ohne explizite Bedingung. Zumindest der erste Lauf, dann sieht es schneller aus. Die Ergebnisse der Entwicklerkonsole waren jedoch immer aufregend. Kann mir jemand sagen warum und mir bitte helfen!salesforce isdeleted = false verlangsamt die Abfrage, anstatt sie zu verbessern

Antwort

0

Wo hast du es gelesen? Sieht mir sehr verdächtig aus. isDeleted = false sollte keine Auswirkungen auf alle normalen Abfragen haben (diejenigen, die ALL ROWS am Ende nicht haben), weil das ist, was sie aus der Box tun. Wenn überhaupt, wird die Ausführung möglicherweise verlangsamt, da der Abfrageoptimierer dieses Feld berücksichtigen müsste (es ist nicht indiziert, es wäre nutzlos, etwas zu indizieren, das zu 99% der gleiche Wert hat).

Sie können mit dem Abfrageoptimierer in der Entwicklerkonsole experimentieren und daran denken, dass Indexstatistiken normalerweise über Nacht neu berechnet werden. Wenn Sie also viele Testdaten geladen haben, können "heutige" Abfragen immer noch alte Statistiken ablaufen lassen.

Sie könnten es zu sehr komplizieren, indem Sie sich auf etwas verlassen, das einmalige Ergebnisse liefert, weil zum Beispiel die Auslastung des Servers zu dem Zeitpunkt niedrig war, als Sie mit dem Experiment begannen. Oder was auch immer das war, ist einfach undokumentiertes Verhalten, das sich mit einer der letzten Veröffentlichungen geändert hat. Wählen Sie einfach einen aussagekräftigen Index aus und erstellen Sie einen aussagekräftigen Index.

Mehr Lesestoff:

Verwandte Themen