Jag har en SELECT-sats som spänner över flera tabeller i en MySQL-databas, och jag har en känsla av att detta borde kunna lösas mycket effektivare. Kan man använda UNION eller liknande för att optimera, och hur skulle det i så fall se ut? UNION använder du om du vill hämta snarlik data från olika tabeller i samma resultatset. Inte för detta fall med andra ord.Optimera SELECT-sats
Användaren identifieras med sessionsvariabeln StudentQueryName.
Tabeller och fält:
RECEIVED
- StudentQueryName
- Lesson
- ExerciseName
- ReceivedYN
EXERCISESTOSEND
- ExerciseName
- ExerciseShortName
- ExerciseLink
- ExerciseOrder
DEADLINES
- StudentQueryName
- Lesson
- Deadline
Så här ser SELECT-satsen ut i dag:
++++++++++++++++++++++++
sqltemp="SELECT Received.Lesson, Received.ExerciseName, Received.ReceivedYN, ExercisesToSend.ExerciseOrder, Deadlines.Deadline, ExercisesToSend.ExerciseName, ExercisesToSend.ExerciseShortName, ExercisesToSend.ExerciseLink FROM Received, Deadlines, ExercisesToSend WHERE ((Received.StudentQueryName = '"& Request.QueryString("queryname") &"') AND (Deadlines.Lesson = Received.Lesson) AND (Deadlines.StudentQueryName = '"& Request.QueryString("queryname") &"') AND (Received.ExerciseName = ExercisesToSend.ExerciseName)) ORDER BY Deadlines.Deadline, ExercisesToSend.ExerciseOrder"
++++++++++++++++++++++++
Hur bör index läggas för att det skall gå så snabbt som möjligt? Kan man skapa index som spänner över flera tabeller..?
Tacksam för alla tips eller läshänvisningar!
JakobSv: Optimera SELECT-sats
Jag tror MySQL säger att man skall skriva precis så som du gör. Personligen skriver jag dock dessa uttryck med JOIN-satser, men jag tror de omtolkas i MySQL till din syntax.
Prova sätt index på de fält du har i WHERE satsen istället, ett och ett i taget om det är enorma tabeller. Sen kan du köra "EXPLAIN " + SQLsats för att kolla hur många rader den måste parsa för att hitta dina kombinationer. Ju färre desto bättre.