sql >> データベース >  >> RDS >> Mysql

UnixTimeに基づく動的MySQLパーティショニング

    1. パーティショニングは、一意のキーのみに基づく必要はありません。ただし、一意のキーが存在する場合は、テーブルのパーティション化に使用される列に含める必要があります。 UNIXTIME列でテーブルをパーティション化するには、次のようにします。

      ALTER TABLE MyTable
      PARTITION BY RANGE COLUMNS (UNIX_TIMESTAMP(datetime_column))
      (
        PARTITION p01 VALUES LESS THAN (2),
        PARTITION p02 VALUES LESS THAN (3),
        PARTITION p03 VALUES LESS THAN (4),
        PARTITION p04 VALUES LESS THAN (MAXVALUE));
      

      または、MySQL 5.5以降で日時列をすぐに分割できます:

      ALTER TABLE MyTable
      PARTITION BY RANGE COLUMNS (datetime_column)
      (
        PARTITION p01 VALUES LESS THAN ('2013-01-01'),
        PARTITION p02 VALUES LESS THAN ('2013-02-01'),
        PARTITION p03 VALUES LESS THAN ('2013-03-01'),
        PARTITION p04 VALUES LESS THAN (MAXVALUE));
      
    2. 完全に自動化されたバージョン(毎月独自のパーティションに保持され、5か月分のデータが保持されます):

      ALTER TABLE MyTable
      PARTITION BY RANGE COLUMNS (YEAR(datetime_column)*100 + MONTH(datetime_column))
      (
        PARTITION p201301 VALUES LESS THAN (201301),
        PARTITION p201302 VALUES LESS THAN (201302),
        PARTITION p201303 VALUES LESS THAN (201303),
        PARTITION p201304 VALUES LESS THAN (201304),
        PARTITION p201305 VALUES LESS THAN (201305),
        PARTITION p_MAXVALUE VALUES LESS THAN (MAXVALUE));
      
      
      
      DECLARE @Min_Part int
      DECLARE @Last_Part int
      DECLARE @SQL varchar (1000)
      
      If (select count (distinct MONTH(datetime_column)) from MyTable) > 5 THEN
          BEGIN
      
          select @Min_Part = (select min(year(datetime_column)*100 + month(datetime_column)) from MyTable),
          @Last_Part = (select max(year(datetime_column)*100 + month(datetime_column)) from MyTable)
      
          set @SQL = 'Alter table MyTable REORGANIZE PARTITION p_MAXVALUE (into partition p' +TO_CHAR (@Last_Part) + 'values less than (' + TO_CHAR (@Last_Part) + ')' 
      
          call common_schema.eval (@sql)
      
          set @SQL = 'Alter table MyTable DROP PARTITION p' + TO_CHAR (@Min_Part) 
      
          call common_schema.eval (@sql)
      
      
      END
      

    P.S. SQLが正確に正しくない場合は、お詫びします。現在、SQLを解析できません。




    1. Mysql:外部キーを追加してもMyISAMテーブルに警告/エラーは発生しません

    2. MySqlテーブルをフィールド名(別名ヘッダーまたは列名)を含むテキストファイルにエクスポート/ダンプする方法

    3. 文字セットエンコーディングの問題

    4. MySQLサーバーのメモリが不足しているか、起動しません