Mysql
 sql >> база данни >  >> RDS >> Mysql

как да разделя таблица по колона дата и час?

Разделянето чрез HASH е много лоша идея с колоните за дата и час, защото не може да използва изрязване на дял . От MySQL документите:

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

Така че можете да съхраните стойността на TO_DAYS(DATE()) в допълнителна колона INTEGER, за да използвате подрязване.

Друга възможност е да използвате разделяне на 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
  );

Сега следната заявка ще използва само дял 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. MYSQL заявката се изпълнява много бавно

  2. Как да разбера кои имейли са в същите списъци?

  3. Проблем с MySQL LAG/LEAD

  4. Преобразуване на времева марка на поле за дата и час от mysql в php

  5. Предотвратете дублиране на стойности в базата данни - mysql