Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Phân vùng MySQL động dựa trên UnixTime

  1. Việc phân vùng không cần chỉ dựa trên một khóa duy nhất. Tuy nhiên, nếu có khóa duy nhất thì nó phải được bao gồm trong các cột được sử dụng để phân vùng bảng trên. Để phân vùng bảng trên cột UNIXTIME, hãy thực hiện:

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

    Hoặc bạn có thể phân vùng trên cột datetime trong 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. Phiên bản hoàn toàn tự động (nó sẽ giữ hàng tháng trong phân vùng riêng, 5 tháng dữ liệu được giữ):

    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. Xin lỗi nếu SQL không chính xác - không thể phân tích cú pháp nó ngay bây giờ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách Bootstrap MySQL hoặc MariaDB Galera Cluster - Đã cập nhật

  2. Nó có nghĩa là gì để thoát khỏi một chuỗi?

  3. Cách tốt nhất để truy vấn trường ngày tháng so với trường ngày là gì?

  4. Chèn hàng loạt EclipseLink rất chậm

  5. Cách cài đặt MySQL với phpMyAdmin trên Ubuntu 14.04