Wir unterstützen eine große Anzahl von Entwicklern und Analysten, die entweder nicht viel wissen oder sich überhaupt nicht um die Abfrageleistung kümmern. Wir haben jeden Tag Hunderte von schlecht konzipierten Abfragen (auch aufgrund einer schlecht gestalteten Datenbankarchitektur), die jeweils Dutzende Gigabyte RAM von unseren Servern entfernen und Ausführungspläne im Bereich von Megabyte im SQL-Cache speichern.
Wir möchten bestimmte Benutzer daran hindern, SORTs und HASH MATCHes zu verwenden, insbesondere ORDER BY, SELECT DISTINCT und JOINs jeglicher Art. Wir möchten, dass Benutzer ihre Daten abrufen, aber nur auf ihrer Seite daran arbeiten.
Könnte dies in SQL Server erreicht werden? Gibt es eine DB-Engine, die das unterstützt? Was würden Sie darüber denken?
Ich weiß, dass dies das Prinzip einer relationalen Datenbank übertreffen würde, aber wir suchen nach einer Möglichkeit, um sicherzustellen, dass die Engine ordnungsgemäß verwendet und nicht von ungebildeten Benutzern missbraucht wird.
Wir erwägen bereits die Implementierung von Resource Governor, um eine bestimmte Menge an Maschinenressourcen für diese fehlerhaften Abfragen zuzuweisen.
quelle
Sie können Ansichten der benötigten Daten erstellen und eine Rolle erstellen, die nur die Auswahl ermöglicht.
Sie können auch gespeicherte Prozeduren erstellen, die eine Ergebnismenge zurückgeben, bei der es sich um eine beliebige Kombination von Tabellen handeln kann, auf die mit einer Abfrage zugegriffen wird, die eine gute Leistung erbringt.
Ich kenne keine Möglichkeit, die Verwendung grundlegender Befehle in SQL zu beschränken, abgesehen von einem Auslöser auf Hacky-Datenbankebene, und schlage vor, dass eine gewisse Ausbildung effektiver ist, wenn Sie so viele Benutzer haben, die nicht wissen, wie man eine gute Abfrage schreibt Weg, dies zu tun. Mittagssitzungen?
quelle