Hallo Pit,
hast Du 3 Indexe erzeugt? Je einen mit B_ART, ART und ID? Das ist nicht unbedingt die beste Lösung. Er kann nur einen davon verwenden und muss, wenn er den ID Index verwendet, innerhalb der ID einen indexsequenziellen Zugriff machen, d.h. die Record-IDs aller Rows aus dem ID Index lesen, die einen bestimmten ID Wert aufweisen, und dann diese Rows aus dem Tablespace lesen, um die beiden übrigen Spalten zu vergleichen. D.h. wenn Du bspw. 20 Sätze mit ID=4711 hast, muss er auf durchschnittlich 10 verschiedene Stellen der Table zugreifen.
Wenn Du einen Index konkret für die Optimierung dieses Zugriffs erzeugen willst, muss er alle 3 Spalten enthalten. Dann kann MYSQL über einen reinen Index-Seek direkt die Record-ID der richtigen Row finden. Bzw. wenn es mehrere gibt, die Record-ID einer richtigen Row. EIne reicht Dir ja. Oder ist die Kombination (B_Art, Art, ID) UNIQUE? Wenn ja, könntest Du den Index auch als UNIQUE anlegen, er erzeugt dann einen INSERT Fehler, wenn Du irrtümlich eine NON-UNIQUE Kombination erzeugst.
In welcher Reihenfolge die 3 Spalten im Index stehen, hängt davon ab, ob der Index auch noch für andere Abfragen genutzt werden könnte. Wenn diese anderen Abfragen nur einen Teil dieser 3 Spalten nutzen, dann muss diese Teilmenge im Index nach vorn.
Rolf
sumpsi - posui - clusi