所以我們可以說,我們有一個包含多個列的表,我們指數兩列:玩家1和玩家2:兩欄「或」查詢速度與單柱「雙行」的查詢速度
GAME PLAYER 1 PLAYER 2 ...
==== ======== ========
1 John Dan
2 Carl William
3 Carl John
...
只對單個列的另一種結構表索引:播放器1(和雙行):
GAME PLAYER 1 PLAYER 2 ...
==== ======== ========
1 John Dan
1 Dan John
2 Carl William
2 William Carl
3 Carl John
3 John Carl
...
我想查詢John玩過的所有遊戲。哪種表格結構/方法更好?
需要考慮的事情:
- 這是一個簡化版本,一個必須考慮的表將包含數千行的至少100的,而且會有查詢中若干個連接。
- 玩家列上會有連接,所以利用「雙列」方法和「OR」/「UNION」也會使一些連接加倍。
- SINGLE COLUMN方法將需要遊戲列中的「GROUP BY」列。
- 我們不想耗盡內存,查詢應該保持在內存中運行!
- TWO COLUMN方法已經變得緩慢了,現在依靠Mysql的內置緩存來保持它以舒適的速度運行。我正在考慮採用單列方法,但不確定後果。
- 另一種解決方案是有一個附加表玩家和遊戲(外鍵)。
的球員是的...這就是要走的路。將玩家垂直分割成另一張桌子。保持遊戲桌的所有列(較重的表)沒有任何重複的行。 – prograhammer
是的,這些列實際上是玩家ID,但在這個例子中,我認爲看名字更容易。 :-) – prograhammer