mysql 那些事-sql优化

show PROCESSLIST 查看进程

explain 查看执行计划

explain PARTITIONS 带分区的执行计划

选择小表作为主表

能用join尽量不用left join

优化查询条件的顺序

关联、查询、排序字段建索引

查询字段建分区

RANGE 分区

ALTER TABLE `t_opportunity_follow`

PARTITION BY RANGE (to_days(gjdate)) (

PARTITION p201612 VALUES LESS THAN (to_days('2017-01-01')),

PARTITION p201701 VALUES LESS THAN (to_days('2017-02-01')),

PARTITION p9999 VALUES LESS THAN (MAXVALUE) );


alter table range_columns

PARTITION BY RANGE COLUMNS(hiredate) (

    PARTITION p1 VALUES LESS THAN ( '20151202' ),

    PARTITION p2 VALUES LESS THAN ( '20151203' ),

    PARTITION p3 VALUES LESS THAN ( '20151204' ),

    PARTITION p4 VALUES LESS THAN ( '20151205' ),

    PARTITION p5 VALUES LESS THAN ( '20151206' ),

    PARTITION p6 VALUES LESS THAN ( '20151207' ),

    PARTITION p7 VALUES LESS THAN ( '20151208' ),

    PARTITION p8 VALUES LESS THAN ( '20151209' ),

    PARTITION p9 VALUES LESS THAN ( '20151210' ),

    PARTITION p10 VALUES LESS THAN ('20151211' )

);


LIST分区

ALTER TABLE expenses    

PARTITION BY LIST COLUMNS (category)    

(    

  PARTITION p01 VALUES IN ( 'lodging', 'food'),    

  PARTITION p02 VALUES IN ( 'flights', 'ground transportation'),    

  PARTITION p03 VALUES IN ( 'leisure', 'customer entertainment'),    

  PARTITION p04 VALUES IN ( 'communications'),    

  PARTITION p05 VALUES IN ( 'fees')    

);  

hash分区

CREATETABLE hash_datetime (

  id INT,

  hiredate DATETIME)

PARTITION BY HASH( TO_DAYS(hiredate) )

PARTITIONS 10;


TIMESTAMP类型使用UNIX_TIMESTAMP方法

key分区

alter table t_report

PARTITION BY key( Project_ID  )

PARTITIONS 20;


删除分区

ALTER TABLE employees DROP PARTITION p0;删处分区和数据

alter table …remove partitioning 删除分区不删除数据

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容