4

私の MySQL データベース テーブルでは、最新の 2 週間のレコードのみがフロント エンド ユーザーによって使用されています。これより古いデータは、管理者のみが使用します。

私がやりたいことは、データベース内のレコードの経過時間に基づいてデータベースを水平方向に分割することにより、フロント エンド ユーザーのパフォーマンスを最適化することです。

したがって、フロントエンドには、過去 2 週間のレコードのみを含むように作成されたパーティションの 1 つと、2 週間より古いレコードを含むように作成された別のパーティションが必要になります。

ただし、これができるかできないかは、MySQL のドキュメント ( here )ではわかりませんでした。

これが達成できるかどうか、およびテーブルの create ステートメントがどのように見えるかを誰かがアドバイスできますか?

4

1 に答える 1

-2

2 テーブル ソリューションの場合、ユニオン sql は次のようになります。

管理者ユーザーは次を使用します。

select
  id,
  column1,
  column2,
  age
from
  oldrecs

union

select
  id,
  column1,
  column2,
  age
from
  newrecs

order by
  age

これは単一のクエリであり、単一の結果セットを返します。select ブロックのフィールド数とタイプは同じであることに注意してください。あなたの場合、両方のテーブルのレイアウトは同じになります。

一方、Web サイトのユーザーは、そのクエリの最後の部分のみを使用します。

select
  id,
  column1,
  column2,
  age
from
  newrecs
order by
  age

これに加えて、古くなったレコードを newrecs テーブルから oldrecs テーブルに移動するための cron ジョブが必要になります。

  insert into oldrecs
  select
    id,
    column1,
    column2,
    age
  from
    newrecs
  where
    age < date(now()) - interval 7 days;

  delete from
    newrecs
  where
    age < date(now()) - interval 7 days;
于 2012-08-28T11:01:57.850 に答える