MySQL: Wie bekomme ich das schneller hin?

chris4712

Erfahrenes Mitglied
Guten Abend!

Wie bekomme ich folgende Abfrage beschleunigt (die Ausführung dieser dauert gute 10 Sekunden):

SQL:
SELECT Name, Vorname FROM Benutzer WHERE ID IN (
   SELECT AutorID FROM Dateien GROUP BY AutorID
  )
  OR Typ= 'Entwickler'
  ORDER BY Name, Vorname

Viele Grüße

Christian
 
Probiers mal mit einem LEFT JOIN
SQL:
SELECT 
	b.name, 
	b.vorname 
FROM 
	benutzer benutzer
	LEFT JOIN dateien d
	ON d.autorid = b.id
WHERE 
  b.yp= 'Entwickler'
  OR NOT d.autorid IS NULL
ORDER BY Name, Vorname

Des weiteren ein Index auf dateien.autorid
 
Die Tabelle dateien sollte sicher einen Index auf autorid haben
SQL:
CREATE INDEX idx_dateien_autor ON dateien (autorid );
 
Die Tabelle dateien sollte sicher einen Index auf autorid haben
Hat sie durch die Spalte "AutorID". Oder muss ich diese Werte direkt mit dem Index der Tabelle Autoren verknüpfen?

Den MySQL Befehl habe ich eben auf die Tabelle Dateien losgelassen. Geändert hat sich nix?! :-(

Sorry, stehe grade ein wenig auf dem Schlauch :-(
 
Hi

mir ist grad nicht klar, ob dir klar ist, was ein Index ist.
Hast du früher schon ein CreateIndex gemacht, oder ist das neu für dich?

Btw., mach den zweiten Teil der Bedingung in deiner Abfrage (Typ= 'Entwickler') vorne hin, und dann or das Andere.
 
mir ist grad nicht klar, ob dir klar ist, was ein Index ist.
Ich dachte eigentlich dass durch die Spalte ID mit der Eigenschaft PRIMARY und AI der Index definiert ist?
Und mit den Indizes werden die Sachen auf die man schnell zugreifen muss definiert und im Speicher (und nicht auf der Festplatte) gehalten. Oder ist das falsch?
 
Und mit den Indizes werden die Sachen auf die man schnell zugreifen muss definiert
Ja (weil ein Index praktisch Zusatzdaten sind, die beim schnellere Fitlern/Ordnen der Werte helfen)

im Speicher (und nicht auf der Festplatte) gehalten.
Nein. Indexdaten sind schon auch auf der Festplatte.

Das DB-System kann Tabellen- und Indexdaten schon auch im RAM haben, vor allem für Sachen die oft angefragt werden zur Verschnellerung, aber auf das hat man so direkt keinen Einfluss.

Ich dachte eigentlich dass durch die Spalte ID mit der Eigenschaft PRIMARY und AI der Index definiert ist?
Ja, Primary (Keys) haben zumindest in MySQL automatisch einen Index dabei (AutoIncrement ist egal).

Der Index ist aber eben für den PrimaryKey allein, nicht für andere Spalten. Wenn der P.K. "ID" heißt werden Sachen wie "WHERE ID=" und "ORDER BY ID" verschnellert. Ich nehme aber an (und Yaslaw offensichtlich auch), dass AutorId nicht der P.K. von Dateien ist, sondern Dateien auch noch eine DateiID oder einfach ID hat? In dem Fall hilft der P.K.-Index für AutorID einfach überhaupt nicht. Für AutorID brauchts einen Index auf der Spalte AutorID.
 
Zurück