2016-07-28 18 views
0

Ich habe eine MySQL-Datenbank zu erstellen, Werte zu speichern, wie unten:einen Index für MySQL-Tabelle Erstellen

id bigint(18) auto_increment, 
NameOfStudent char(40), 
UnixTime_YearOfExam bigint(18), 
percentageScored decimal(5,2), 
marksSubJect1 decimal(5,2), 
marksSubJect2 decimal(5,2), 
marksSubJect3 decimal(5,2), 

Die Abfragen werden:

Select * 
from table 
where NameOfStudent='xyz' 
order by UnixTime_YearOfExam desc, percentageScored desc limit 3 

Es gibt etwa 2000 Studenten mit Aufzeichnungen verschiedenen Jahre für jeden Schüler. Somit hat jeder Schüler ca. 5-10 Einträge. Meine Frage ist:

  1. Was ist der Index für diese Tabelle sollte so die obige Abfrage schnell. Die Where-Klausel und Sortierung sowie

  2. Wie kann ich die letzten 3 Datensätze von jedem Schüler (Reihenfolge von YearOfExam desc Limit 3) wählen, ohne für jeden Schüler individuelle Abfragen ausführen zu müssen? so, dass das Ergebnis, dass eine Abfrage wird wie folgt aussehen:

    student_1, yearOfExam2015, percentageScored 
    student_1, yearOfExam2014, percentageScored 
    student_1, yearOfExam2013, percentageScored 
    student_2, yearOfExam2015, percentageScored 
    student_2, yearOfExam2014, percentageScored 
    student_2, yearOfExam2013, percentageScored 
    and so on 
    
+1

Vielleicht teilen Sie die Daten in mindestens zwei Tabellen, eine für den Studenten und eine für die Prüfungen, die nur als FK für einen Studenten. Mach dir keine Sorgen über die Leistung bei 2k Einträge, es ist zu diesem Zeitpunkt unbedeutend. –

+0

Die Gesamtschüler sind etwa 2k. Die Aufzeichnungen sind 5-10 pro Schüler. Insgesamt etwa 100k-200k –

+0

Wenn Sie die Mathematik, "2k * 10" ist 20k max ... –

Antwort

0

Ich würde Index, der die „Marken“ Tabelle mit „marks_id“ Feld, das auto-Schritten. Solange Sie die Felder "student_name" oder "student_id" in beiden Tabellen haben, können Sie einen INNER JOIN ausführen, um alle benötigten Informationen in einer Abfrage abzurufen.

+0

okay, wenn ich Tabellen wie: marksID, studentID, yearOfExam, Prozentsatz, etc und eine andere Tabelle wie: studentID, studentName usw. dann was wird die Abfrage die letzten 3 Datensätze von jedem Schüler sortiert nach yearOfExam auswählen? Es kann mehr als 3 Datensätze für jeden Schüler geben –

Verwandte Themen