11 Stimmen

Abfrage vs. Ansicht

Ich möchte wissen, was der Unterschied zwischen einer Abfrage und einer Ansicht in Bezug auf die Leistung ist. Und wenn eine Ansicht kostspielig ist, was könnte ich außer einer Abfrage noch tun, um die Leistung zu verbessern?

1voto

Jonathan Leffler Punkte 694013

Eine Ansicht ist für den Computer kaum teurer als das handschriftliche Ausfüllen der Abfrage. Ein View kann dem Programmierer/Benutzer eine Menge Zeit ersparen, wenn er dieselbe Abfrage immer wieder schreibt und sich dabei vertut, usw. Der View kann auch die einzige Möglichkeit sein, auf die Daten zuzugreifen, wenn Views auch zur Durchsetzung von Berechtigungen (Zugriffskontrolle) auf die zugrunde liegenden Tabellen verwendet werden.

Wenn die Abfrage nicht gut funktioniert, müssen Sie überprüfen, wie die Abfrage aufgebaut ist und ob die Tabellen alle über die entsprechenden Indizes verfügen. Wenn Ihr System für eine gute Leistung des Optimierers genaue Statistiken benötigt, haben Sie diese Statistiken in letzter Zeit ausreichend aktualisiert?

Vor langer Zeit stieß ich einmal auf ein System, in dem ein Abfragegenerator eine Abfrage erstellt hatte, die siebzehn Tabellen in einer einzigen FROM-Klausel auflistete, einschließlich mehrerer LEFT OUTER JOIN einer Tabelle mit sich selbst. Bei näherer Betrachtung stellte sich heraus, dass es sich bei mehreren der "Tabellen" tatsächlich um Multi-Tabellen-Ansichten handelte, von denen einige auch Self-Outer-Joins enthielten und selbst an Self-Outer-Joins der Ansicht beteiligt waren. Zu sagen " . " ist eine Untertreibung. Es gab eine Menge Bereinigungsmöglichkeiten, um die Leistung dieser Abfrage zu verbessern - Beseitigung unnötiger Outer-Joins, Self-Joins usw. (Die Abfrage war sogar älter als die explizite Join-Notation von SQL-92 - wie gesagt, vor langer Zeit -, so dass die Syntax für den äußeren Join DBMS-spezifisch war).

0voto

David Pike Punkte 427

Wenn Sie die Netzwerkleistung meinen, dann würde das Arbeiten aus einem lokalen Cache (wie bei ADO.Net DataSets) den Netzwerkverkehr reduzieren, könnte aber Probleme beim Sperren verursachen. Nur ein Gedanke.

0voto

Giovanni Galbo Punkte 12811

Eine Ansicht ist immer noch eine Abfrage, sie abstrahiert nur bestimmte Teile davon, damit Ihre Abfragen vereinfacht werden können (wenn sie ähnliche Dinge tun) und um die Wiederverwendung zu maximieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X