0

スポーツ器具をmysqlデータベースに保存しています。現在、私は約 20,000 のレコードを持っており、そのうち約 3000 が現在の備品 (今年) です。定期的にアクセス、読み取り、更新する必要がある現在のフィクスチャと、定期的にアクセスするだけでよい古いフィクスチャです。

したがって、私の計画は、現在のフィクスチャを 1 つのテーブルに配置し、現在のフィクスチャを別のテーブルに保持することです。

Fixtures_histroic フィクスチャ_現在

これは良い習慣ですか? 私の理論では、3,000 件しか結果が得られない場合、20,000 件のレコードをトロールする必要はありません。次に、新しいシーズンまたは年が始まると、現在のフィクスチャを履歴テーブルにコピーして、新しいカレントを開始できます。

次の質問は、両方のテーブルでデータを検索する方法です。単純な結合の方法は知っていますが、このクエリを検討してください。 と の両方をクエリするにはどうすればよいでしょうmatches_currentmatches_histroic。クエリはすでに結合であるため、結合の結合になります。かなりぐちゃぐちゃになりそうですよね?

SELECT `m`.*, `h`.`name` AS  "homeTeam", `a`.`name` AS  "awayTeam", `o`.*
FROM `matches_current` m
JOIN `teams` `h` ON `m`.`home_team_id`=`h`.`team_id` 
JOIN `teams` `a` ON `m`.`away_team_id`=`a`.`team_id`
JOIN `outcomes` `o` ON `m`.`score_id`=`o`.`outcome_id`
WHERE `home_team_id`=1 AND `away_team_id`=2 
AND `m`.`score_id`>0 
ORDER BY `date` DESC

それで、私がしていることは正しいですか、それとも 20,000 レコードすべてを 1 つのテーブルに入れる必要がありますか?

前もって感謝します、

アラン。

4

2 に答える 2

1

お粗末な考え。20,000 レコードはそれほど多くありません。おそらく、データに対してまともなインデックス付けスキームを使用して、必要なことを行うことができます。また、同じデータを複数のテーブルに分割すると、メンテナンス、セキュリティ、バックアップ、およびデータの整合性に問題が生じます。

このような少数のレコードでこれを行う唯一の理由は、レコード サイズが過度に大きい場合です。したがって、レコードが 10,000 バイトだったとしても、テーブルが使用する合計スペースはわずか 200 M バイトであり、データベースの標準ではまだ小さいです。

より多くの行があり、この状況を処理したい場合は、別のテーブルを作成するのではなく、テーブルを分割することをお勧めします。

于 2013-08-16T22:22:41.340 に答える