0

私は2つのテーブルを持っています:users (userid,student_no,name)regd (semester,student_no)users約7,000レコードregdが含まれ、約20,000レコードが含まれます。regdにないエントリがある場合がありますusers

semester = '2012-2'のエントリがあるすべてのエントリをすばやく選択するにはどうすればよいですか?私はこれを試しました:usersregd

 SELECT * FROM  `regd` , users WHERE
      semester =  '2012-2' AND users.student_no = regd.student_no

しかし、私が小さなデータベースを持っている場合、クエリをロードするのに永遠に時間がかかります。6か月ごとに、毎年約10,000のエントリが追加されregd、約2,500のエントリが追加されますusers

4

1 に答える 1

3

結合列にインデックスを追加します。

CREATE INDEX idx_regd_student_no ON regd(student_no);

CREATE INDEX idx_users_student_no ON users(student_no);

また、テーブルにPKがない場合は、PKを追加します。regdの場合、PK=を使用できます(semester, student_no)

他のコメントが言うように、22kレコードは大きくないので、まともなインデックスがないと推測できます。

お役に立てれば。

于 2013-03-01T16:53:17.980 に答える