新版博客SEO优化基本完成,新老博客内容正在整合中,保证每篇文章高质量。 SiteMap RSS Github
Mysql查询优化---分表
嘉美伯爵   2018年9月20日 08:38   数据库   MySQL   204  

前提

  • 存储引擎的使用不同,冷数据使用MyIsam 可以有更好的查询数据。活跃数据,可以使用Innodb ,可以有更好的更新速度。
  • 对冷数据进行更多的从库配置,因为更多的操作是查询,这样来加快查询速度。对热数据,可以相对有更多的主库的横向分表处理。
  • 对于一些特殊的活跃数据,也可以考虑使用memcache ,redis之类的缓存,等累计到一定量再去更新数据库.

水平分表

创建一个完整表存储着所有的成员信息

create table product(
id bigint auto_increment primary key,
pname varchar(20),
pdesc tinyint not null default '0'
)engine=myisam default charset=utf8 auto_increment=1;

建立子表

DROP table IF EXISTS tb_product1;
create table tb_member1(
    id bigint primary key auto_increment ,
    pname varchar(20),
    pdesc tinyint not null default '0'
)ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
DROP table IF EXISTS tb_member2;
create table tb_product2(
    id bigint primary key auto_increment ,
    pname varchar(20),
    pdesc tinyint not null default '0'
)ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

插入

insert into tb_product1(id,pname,pdesc) select id,pname,pdesc from product where id%2=0;
insert into tb_product2(id,pname,pdesc) select id,pname,pdesc from product where id%2=1;

垂直分表

  • 把不常用的字段单独放在一张表;
  • 把text,blob等大字段拆分出来放在附表中;
  • 经常组合查询的列放在一张表中。