Vorteile des expliziten Schreibens eines Indexes

Ich frage mich, warum man sich überhaupt darum kümmern sollte, einen Index in der Abfrage explizit zu schreiben. Ich sehe oft solche Abfragen

select blabla from Table with(nolock index = index_name) 

Index ist bereits definiert, und der Abfrageoptimierer wählt den besten Index selbst aus. Ist es nicht logischer und effizienter, die Abfrage zu schreiben:

 select blabla from Table with(nolock) 

Was sind die Vorteile des ausdrücklichen Schreibens eines Index in der Abfrage?

EDIT Vielen Dank für deine Meinungen. Die beste Wahl ist nicht, die Indizierung explizit zu erzwingen. In diesem Fall könnten nur databaseanbieter vorteilhaft sein und es ist nicht mit der performance verwandt. Sie geben Indizes explizit an und erzwingen den Ausführungsplan, um sich nicht zu ändern, um die Ausführungszeiten vorherzusagen.

Das ist Frage ist eine Art Rhetorik: man muss Effizienz messen, nicht Grund dafür.

In ssms kannst du es mit "Include Actual Execution Plan" (Ctrl-M).

Versuchen Sie, in ssms zu folgen und schauen Sie auf "Ausführungsplan":

 SELECT * FROM msdb.dbo.sysjobs with (index = nc1) SELECT * FROM msdb.dbo.sysjobs with (index = clust) SELECT * FROM msdb.dbo.sysjobs 

Sie werden feststellen, dass: a) erster Index-Hinweis nur verlangsamt wird, b) Hinweis auf gruppierten Index und kein Hinweis haben entsprechende Pläne

Die Angabe von Index im SQL-SERVER bewirkt die search nach diesem Index.

Wenn eine Abfrage ausgeführt wird, bestimmt SQL server Engine, welcher Index verwendet werden soll. SQL server verwendet den Index, der die niedrigsten Kosten auf der Grundlage der performance hat. Der Index, der für die performance am besten ist, wird automatisch verwendet. Es gibt einige Fälle, in denen databaseentwickler der beste Richter des verwendeten Index ist. DBA kann SQL server verweisen, welcher Index für die Ausführung von Abfrage verwendet werden soll.

Wenn der von Ihnen erstellte Index nicht von SQL server abgeholt wird, dann versuchen Sie, den SQL server mit dem HINWEIS zu erzählen.

Sie können unter Links verweisen

http://blog.sqlauthority.com/2009/02/07/sql-server-introduktion-to-force-index-query-hints-index-hint/

https://www.simple-talk.com/sql/performance/index-selection-and-the-query-optimizer/

Ich denke, es kann nützlich sein, wenn sql-Engine erstellt Ausführungsplan für Abfragen in gespeicherte Prozedur. Es ist vielleicht eine Situation, wenn SQL-Engine den Ausführungsplan für Parameter erstellt hat, die zuvor in der gespeicherten Prozedur übergeben wurden (Parameter schnüffeln). Für diese Werte kann SQL-Engine entscheiden, nicht zu verwenden Index. Um es zu vermeiden, können Sie explizit die Indexnutzung setzen.

Zusätzliche Informationen über Parameter Schnüffeln finden Sie in diesem Artikel ( http://sqlperformance.com/2013/08/t-sql-queries/parameter-sniffing-embedding-and-die-recompile-optionen ) und hier ( http: / /www.sommarskog.se/query-plan-mysteries.html )