2016-07-28 5 views
0

MySQLのテーブルにインデックスを作成する:私は以下のように値を格納するためのMySQLデータベースを作成する必要が

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), 

クエリは次のようになります。

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

は異なるのレコードを持つ約2000の学生が

あります。各学生の年。したがって、各生徒は約5-10のレコードを持っています。 私の質問は:

  1. 上記のクエリが高速であるように、このテーブルにインデックスがどうあるべきか。 where節とソートも同様です

  2. 生徒ごとに個別のクエリを実行することなく、各生徒の最後の3つのレコードをYearOfExam desc limit 3で選択するにはどうすればよいですか?

    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

データを少なくとも2つのテーブルに分割することができます.1つは生徒用で、もう1つは生徒のFKとしてのみです。 2kのエントリでのパフォーマンスは心配しないでください。この時点では重要ではありません。 –

+0

総学生は約2kです。記録は1生徒あたり5〜10人です。合計で約100k-200k –

+0

あなたが数学を行うならば、 '2k * 10'は最大20kです... –

答えて

0

私はどの自動インクリメント「marks_id」フィールドを持つインデックス「マーク」の表を希望: その1つのクエリは次のようになりますの結果ように。両方のテーブルに「student_name」フィールドまたは「student_id」フィールドがある限り、INNER JOINを実行すると、必要なすべての情報を1つのクエリで取得できます。

+0

大丈夫です:marksID、studentID、yearOfExam、Percentageなどのテーブルを作成し、studentID、studentNameなどのテーブルを作成すると、yearOfExamでソートされたすべての生徒の最後の3レコードを選択するクエリは何ですか?生徒ごとに3つ以上のレコードがあります –

関連する問題