我有這樣如下表:數據庫中的兩個列邏輯或索引,或創建單獨的「索引」表
Matches -> match_id, team_a_id , team_b_id, score
該表將兩支隊伍(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的索引?但即便如此,我仍然有AB或BA之間的邏輯OR條件。
或者, 我還有一個想法,那就是有另一個表讓說,歷史
History -> team_hash, match_id
我手動建立team_hash其中hash(a,b) == hash(b,a)
。但是這導致插入稍慢,但讀取速度更快。或者它真的更快讀?
謝謝你的解釋 – Fajarmf 2012-07-30 01:10:13
uhm btw,可以有跟進問題嗎?假設我們有這些安排,這樣team_a_id
Fajarmf
2012-07-30 23:42:21
@Fajarmf但是,如果表中有兩行,會降低緩存的有效性,並且DBMS難以強制執行兩者的存在行。兩種索引的搜索方式仍然應該足夠快,但是如果您已經**測量**效果,可以根據實際的數據量消除其中的一項,並得出結論認爲,此查詢和其他查詢的性能平衡更有利,請放手。我只是不會默認這樣做 - 當面對數據量較小的設計與數據量較大的設計時,默認情況下選擇較小的數據,並且只有在徹底測量後才重新考慮。 – 2012-07-31 09:01:48