1. 程式人生 > 資料庫 >Mysql分割槽和索引記錄

Mysql分割槽和索引記錄

分割槽

前提:當資料量達到800w的時候,用create_date進行設定索引查詢,也需要花費5s以上,所以還得進行分割槽操作,達到更快的效果。設定好分割槽後,查詢就是0.5s。

開始操作:用create_date建立分割槽,需要把create_date設定為主鍵
所以,首先,建id和create_date的聯合主鍵

CREATE TABLE `t_service_object` (
  `id` varchar(64) NOT NULL,
  `type` int(1) DEFAULT NULL COMMENT '型別 1 服務 2 包 3 類 4 方法',
  `object_name` varchar(255) DEFAULT NULL COMMENT '名稱',
  `parent_id` varchar(64) DEFAULT NULL,
  `create_date` date NOT NULL,
  `is_coverage` int(1) DEFAULT NULL COMMENT '0 未被覆蓋  1被覆蓋',
  PRIMARY KEY (`id`,`create_date`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC

建立分割槽:

如果資料量很大,在有資料執行這個,會等待比較久。750w資料等待了好幾分鐘。

ALTER TABLE t_service_object partition by range(TO_DAYS(create_date))(                   PARTITION BY RANGE (YEAR(sale_date)*100+MONTH(sale_date)) (
	PARTITION Jan VALUES less than(TO_DAYS('2020-01-31')),
	PARTITION Feb VALUES less than(TO_DAYS('2020-02-29')),
	PARTITION Mar VALUES less than(TO_DAYS('2020-03-31')),
	PARTITION Apr VALUES less than(TO_DAYS('2020-04-30')),
	PARTITION May VALUES less than(TO_DAYS('2020-05-31')),
	PARTITION Jun VALUES less than(TO_DAYS('2020-06-30')),
	PARTITION Jul VALUES less than(TO_DAYS('2020-07-31')),
	PARTITION Aug VALUES less than(TO_DAYS('2020-08-31')),
	PARTITION Sept VALUES less than(TO_DAYS('2020-09-30')),
	PARTITION Oct VALUES less than(TO_DAYS('2020-10-31')),
	PARTITION Nov VALUES less than(TO_DAYS('2020-11-30')),
	PARTITION Dece VALUES less than(TO_DAYS('2020-12-31'))
);

查詢分割槽:

select 
  partition_name part,  
  partition_expression expr,  
  partition_description descr,  
  table_rows  
from information_schema.partitions  where 
  table_schema = schema()  
  and table_name='t_service_object'; 

執行完後,有新插入資料會自動到相應的分割槽裡面去。

另一種建立分割槽方法:

PARTITION BY RANGE (YEAR(sale_date)*100+MONTH(sale_date)) (

   PARTITION p201001 VALUES LESS THAN (201002),

   PARTITION p201002 VALUES LESS THAN (201003),

   PARTITION p201003 VALUES LESS THAN (201004),

   PARTITION p201004 VALUES LESS THAN (201005),

   PARTITION p201005 VALUES LESS THAN (201006),

   PARTITION p201006 VALUES LESS THAN (201007),

   PARTITION p201007 VALUES LESS THAN (201008),

   PARTITION p201008 VALUES LESS THAN (201009),

   PARTITION p201009 VALUES LESS THAN (201010),

   PARTITION pcatchall VLAUES LESS THAN MAXVALUE );

索引

建立組合索引

ALTER TABLE t_service_object_two ADD INDEX index_titme_time
(id,create_date)

建立主鍵索引

ALTER TABLE t_service_object_two ADD PRIMARY KEY (
create_date )

普通索引

ALTER TABLE t_service_object_two ADD INDEX index_name (
create_date )

檢視索引

show index from t_service_object_two

刪除索引

drop index index_titme_time on t_service_object_two;