Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

bagaimana cara mempartisi tabel dengan kolom datetime?

Partisi oleh HASH adalah ide yang sangat buruk dengan kolom datetime, karena tidak dapat menggunakan pemangkasan partisi . Dari dokumen MySQL:

SELECT * FROM t4 WHERE dob >= '2001-04-14' AND dob <= '2005-10-15';

Jadi, Anda dapat menyimpan nilai TO_DAYS(DATE()) dalam kolom INTEGER tambahan untuk menggunakan pemangkasan.

Pilihan lain adalah menggunakan partisi RANGE:

CREATE TABLE raw_log_2011_4 (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  logid char(16) NOT NULL,
  tid char(16) NOT NULL,
  reporterip char(46) DEFAULT NULL,
  ftime datetime DEFAULT NULL,
  KEY id (id)
) ENGINE=InnoDB AUTO_INCREMENT=286802795 DEFAULT CHARSET=utf8
  PARTITION BY RANGE( TO_DAYS(ftime) ) (
    PARTITION p20110401 VALUES LESS THAN (TO_DAYS('2011-04-02')),
    PARTITION p20110402 VALUES LESS THAN (TO_DAYS('2011-04-03')),
    PARTITION p20110403 VALUES LESS THAN (TO_DAYS('2011-04-04')),
    PARTITION p20110404 VALUES LESS THAN (TO_DAYS('2011-04-05')),
    ...
    PARTITION p20110426 VALUES LESS THAN (TO_DAYS('2011-04-27')),
    PARTITION p20110427 VALUES LESS THAN (TO_DAYS('2011-04-28')),
    PARTITION p20110428 VALUES LESS THAN (TO_DAYS('2011-04-29')),
    PARTITION p20110429 VALUES LESS THAN (TO_DAYS('2011-04-30')),
    PARTITION future VALUES LESS THAN MAXVALUE
  );

Sekarang kueri berikut hanya akan menggunakan partisi p20110403:

SELECT * FROM raw_log_2011_4 WHERE ftime = '2011-04-03';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Maksimum berdasarkan grup

  2. Unduh csv dari codeigniter mysql

  3. Berikan izin pengguna untuk hanya melihat tampilan MySQL dan tidak ada yang lain

  4. Penyisipan Massal di MYSQL dari File XML

  5. Bagaimana Anda menyimpan pesanan menggunakan SELECT WHERE IN()?