MySQL大数据优化[ 一 ] 水平拆分和垂直拆分mysql[转]

2017年2月6日

偶尔看到关于数据库表的处理的文章,也是一个思路,对mysql的分表处理

在这里我们将会逐步的讲解一下mysql大数据优化的系列文章,当大家在处理大数据时,方便优化mysql以达到优化,今天我们讲的是水平拆分和垂直拆分

1. 水平分割

例:QQ的登录表。假设QQ的用户有100亿,如果只有一张表,每个用户登录的时候数据库都要从这100亿中查找,会很慢很慢。如果将这一张表分成100份,每张表有1亿条,就小了很多,比如qq0,qq1,qq1…qq99表。用户登录的时候,可以将用户的id%100,那么会得到0-99的数,查询表的时候,将表名qq跟取模的数连接起来,就构建了表名。比如123456789用户,取模的89,那么就到qq89表查询,查询的时间将会大大缩短。

测试代码如下(php):

$table_id = $_GET['table_id'] ;
$user_id = $_GET['user_id'] ;
$tableName = 'users'.$table_id;
$sql = "Select * from ".$tableName." where id = ".$user_id;

2.垂直分割

垂直分割指的是:表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。

比如论坛文章列表,如果都在一条记录,那样在文章列表中查看文章,文章这个大字段也会被扫描,很消耗性能。

这时候我们怎么办呢?其实我们需要建立2个表,一个表存文章标题,作者,点击量等信息,例外一个子表只存储文章id和文章内容,每次需要查看文章详情的时候,才去获取这个大字段,这样可以对mysql达到很好的优化!

原文出处:http://bbs.earnp.com/article/314

No Comments

发表评论