私はこの次の表を持っています:
Matches -> match_id, team_a_id , team_b_id, score
このテーブルは、2つのチーム(チームAとチームB)間の一致を記録します。ただし、チームAがホストとしてプレイすることもあれば、チームBがホストとしてプレイすることもあります。したがって、チームaとチームbの間で一致する履歴を見つけようとしたとき。私が現在していることは
select * from matches where (team_a_id = 1 and team_b_id = 2) or (team_a_id = 2 and team_b_id = 1);
そのような場合へのより良いアプローチはありますか?上記のクエリに関して、team_a_idとteam_b_idの組み合わせのインデックスを含めるのは正しいですか?しかし、それでも、ABORBAの間に論理OR条件があります。
あるいは、私は別のアイデアを持っています、それは別のテーブルに歴史を言わせることです
History -> team_hash, match_id
ここでteam_hashを手動で作成しhash(a,b) == hash(b,a)
ます。ただし、これにより、挿入はわずかに遅くなりますが、読み取りは速くなります。それとも本当に速く読めますか?