Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dynamiczne partycjonowanie MySQL oparte na UnixTime

  1. Partycjonowanie nie musi opierać się wyłącznie na unikalnym kluczu. Jeśli jednak istnieje unikalny klucz, powinien on zostać uwzględniony w kolumnach używanych do partycjonowania tabeli. Do tabeli partycji w kolumnie UNIXTIME wykonaj:

    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));
    

    Lub możesz partycjonować na kolumnie datetime od razu w 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. W pełni zautomatyzowana wersja (przechowywałaby co miesiąc na własnej partycji, przechowywanych przez 5 miesięcy danych):

    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
    

PS Przepraszamy, jeśli SQL nie jest do końca poprawny - nie mogę go teraz przeanalizować.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Importowanie spakowanych plików w Mysql za pomocą CMD

  2. Jak mogę wyłączyć automatyczne zwiększanie identyfikatora przed aktualizacją przy aktualizacji zduplikowanego klucza?

  3. Jak uciec od pojedynczego cudzysłowu w literale ciągu za pomocą MySQL z Javy?

  4. SQLSTATE[23000]:Obsługa błędu naruszenia ograniczenia integralności

  5. Jak wyjaśnić zapytanie z parametrami w MySQL?