Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Sprachelemente » Suchbedingungen

 

Explizite Selektivitätsschätzungen

SQL Anywhere benutzt Statistiken, um die wirksamste Strategie für das Ausführen der einzelnen Anweisungen festzulegen. SQL Anywhere stellt diese Statistiken automatisch zusammen und aktualisiert sie. Diese Statistiken werden in der Datenbank in der Systemtabelle ISYSCOLSTAT permanent gespeichert. Statistiken, die während der Prozessverarbeitung einer Anweisung erstellt werden, stehen bei der Suche nach effizienten Verfahren für die Ausführung nachfolgender Anweisungen zur Verfügung.

Es kommt gelegentlich vor, dass die Statistiken ungenau werden oder dass relevante Statistiken nicht verfügbar sind. Dieser Fall tritt üblicherweise dann ein, wenn eine große Menge von Daten hinzugefügt, aktualisiert oder gelöscht wurde und dann nur wenige Abfragen ausgeführt wurden. In dieser Situation müssen Sie eventuell eine CREATE STATISTICS-Anweisung ausführen. Weitere Hinweise finden Sie unter CREATE STATISTICS-Anweisung.

Wenn es Probleme mit einem bestimmten Ausführungsplan gibt, können Sie Optimierer-Hints verwenden, damit ein bestimmter Index verwendet wird. Weitere Hinweise finden Sie unter FROM-Klausel.

Unter ungewöhnlichen Umständen allerdings können sich diese Maßnahmen als nicht effektiv herausstellen. In diesen Fällen können Sie manchmal die Performance steigern, indem Sie Selektivitätsschätzungen explizit angeben.

Für jede Tabelle in einem möglichen Ausführungsplan muss der Optimierer die Anzahl der Zeilen schätzen, die Teil der Ergebnismenge sein können. Wenn Sie wissen, dass eine Bedingung eine Erfolgsrate hat, die von der Schätzung des Optimierers abweicht, können Sie in der Suchbedingung eine eigene Schätzung übergeben.

Die Schätzung ist ein Prozentsatz. Sie kann eine positive Ganzzahl sein oder Bruchwerte enthalten.

Achtung

Versuchen Sie, wo immer möglich, explizite Schätzungen in Anweisungen zu vermeiden, die weiterhin genutzt werden. Wenn sich die Daten ändern, verliert die explizite Schätzung ihre Gültigkeit, wodurch der Optimierer möglicherweise ungeeignete Pläne auswählt. Wenn Sie explizite Selektivitätsschätzungen verwenden, achten Sie darauf, dass die Zahl genau ist. Verwenden Sie beispielsweise nicht die Werte zwischen 0% und 100%, um die Verwendung eines Indexes zu erzwingen.

Sie können Benutzerschätzungen ausschließen, indem Sie die Datenbankoption user_estimates auf OFF setzen. Der Standardwert für user_estimates ist "Override-Magic", was bedeutet, dass auf benutzerdefinierte Selektivitätsschätzungen nur dann zurückgegriffen wird, wenn der Optimierer einen als "MAGIC" bezeichneten Standardwert für die Selektivität einer Bedingung verwenden würde. Der Optimierer benutzt MAGIC-Werte als letzte Möglichkeit, wenn er die Selektivität eines Prädikats nicht genau vorhersagen kann.

Weitere Hinweise zur Deaktivierung von benutzerdefinierten Selektivitätsschätzungen finden Sie unter user_estimates-Option [Datenbank].

Weitere Hinweise zu Statistiken finden Sie unter Optimiererschätzungen und Spaltenstatistiken.

Beispiele

In der folgenden Abfrage gibt die Schätzung an, dass ein Prozent der ShipDate-Werte später als 2001/06/30 sind:

SELECT  ShipDate
   FROM  SalesOrderItems
WHERE ( ShipDate > '2001/06/30', 1 )
ORDER BY ShipDate DESC;

In den folgenden Abfragen wird geschätzt, dass ein halbes Prozent der Zeilen die Bedingung erfüllt:

SELECT *
   FROM Customers c, SalesOrders o
WHERE (c.ID = o.CustomerID, 0.5);

Bruchwerte ermöglichen genauere Benutzerschätzungen für Joins und große Tabellen.