2

MySQL 5.1を実行していて、Webログのデータをテーブルに保存しています。日ごとに分割したい日時列があります。毎晩、前日の新しいデータをテーブルに追加します。そのため、日ごとにパーティションを作成したいと思います。通常は数百万行です。MySQLクエリが完了するまでに通常20秒かかるため、日ごとにパーティションを作成したいと思います。

つまり、ユーザーはカレンダーをクリックして1日分のデータで構成されるWebログ情報を取得できるため、日ごとに分割したいと思います。データは数百万行に及びます(1日)。

多くのパーティショニング記事で私が見た問題は、パーティショニングする値を明示的に指定する必要があるということです。パーティションを追加するために毎晩テーブルを変更する必要があるため、この方法は好きではありません。これを自動的に行うための組み込みのMySQL機能はありますか、それとも毎晩テーブルを変更するためにbashスクリプト/ cronジョブを作成する必要がありますか?

たとえば、次の例に従う場合:http: //datacharmer.blogspot.com/2008/12/partition-helper-improving-usability.html

1年で365個のパーティションができます。

4

2 に答える 2

8

インデックスは、すべてのテーブルに必須です。インデックスの詳細は、あなたが持っているものから派生しSELECTsます。それらを見てみましょう。

経験則:

  • 100 万行未満のテーブルを分割しない
  • 約 50 を超えるパーティションを使用しないでください。
  • 数日/数週間/数か月後に「古いデータを消去」している場合は、その方法に関するコードについて私のブログを参照してください。
  • PARTITION BY RANGE()が唯一の便利なパーティション メカニズムです。
于 2015-11-26T04:45:54.263 に答える
2

私はこれを一度試しました。最終的に、定期的に (月に 1 回) パーティショニングを行う cron ジョブを作成しました。テーブルごとに最大 1024 個のパーティションがあることに注意してください (http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations.html)。

率直に言って、私はおそらくそれをお勧めしません。私のニーズでは、これにより、クロスパーティションの結果を必要とするすべての検索で大幅な速度低下が発生することがわかりました.

更新された説明に基づいて、まず必要なインデックスを作成することをお勧めします。必要なインデックスを確保する方法をよりよく学ぶために、MySQL の最適化の章 (具体的にはインデックスに関するセクション)を読みます。また、slow_query ログを使用して、問題のあるクエリを特定することもできます。

絞り込むと、パーティション分割の必要性が、特定のパーティションのサイズを制限するためにパーティション分割する必要があることがわかります(おそらく、ストレージスペースや迅速な切り捨てなどのため)。その時点で、月単位または年単位で分割することを決定できます。

日付をパーティション キーとして使用するパーティショニングでは、明らかに日付フィールドのインデックスを作成する必要があります。それから始めて、スケジュールに基づいてパーティション分割するという余分な作業に入る前に、それがどのように進行するかを確認してください。

于 2012-08-30T15:34:27.877 に答える