mysql怎么优化数据库 mysql 数据优化( 八 )


**1、分表**
在分表之前 , 首先要选中合适的分表策略(以哪个字典为分表字段,需要将数据分为多少张表) , 使数据能够均衡的分布在多张表中,并且不影响正常的查询 。在企业级应用中,往往使用org_id(组织主键)做为分表字段,在互联网应用中往往是userid 。在确定分表策略后 , 当数据进行存储及查询时 , 需要确定到哪张表里去查找数据 , 
数据存放的数据表 = 分表字段的内容 % 分表数量
**2、分库**
分表能够解决单表数据量过大带来的查询效率下降的问题,但是不能给数据库的并发访问带来质的提升,面对高并发的写访问,当Master无法承担高并发的写入请求时,不管如何扩展Slave服务器,都没有意义了 。我们通过对数据库进行拆分,来提高数据库的写入能力,即所谓的分库 。分库采用对关键字取模的方式,对数据库进行路由 。
数据存放的数据库=分库字段的内容%数据库的数量
**3、即分表又分库**
数据库分表可以解决单表海量数据的查询性能问题,分库可以解决单台数据库的并发访问压力问题 。
当数据库同时面临海量数据存储和高并发访问的时候,需要同时采取分表和分库策略 。一般分表分库策略如下:
中间变量 = 关键字%(数据库数量*单库数据表数量)
库 = 取整(中间变量/单库数据表数量)
表 = (中间变量%单库数据表数量)
实例:
1、分库分表
很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢,同事的做法是将其散列到100个表中,分别从members0到members99,然后根据mid分发记录到这些表中,牛逼的代码大概是这样子:
复制代码 代码如下:
?php
for($i=0;$i 100; $i++ ){
//echo "CREATE TABLE db2.members{$i} LIKE db1.members
";
echo "INSERT INTO members{$i} SELECT * FROM members WHERE mid%100={$i}
";
【mysql怎么优化数据库 mysql 数据优化】 }
?
2、不停机修改mysql表结构
同样还是members表,前期设计的表结构不尽合理 , 随着数据库不断运行,其冗余数据也是增长巨大,同事使用了下面的方法来处理:
先创建一个临时表:
/*创建临时表*/
CREATE TABLE members_tmp LIKE members
然后修改members_tmp的表结构为新结构 , 接着使用上面那个for循环来导出数据,因为1000万的数据一次性导出是不对的 , mid是主键 , 一个区间一个区间的导,基本是一次导出5万条吧,这里略去了
接着重命名将新表替换上去:
/*这是个颇为经典的语句哈*/
RENAME TABLE members TO members_bak,members_tmp TO members;
就是这样,基本可以做到无损失,无需停机更新表结构 , 但实际上RENAME期间表是被锁死的,所以选择在线少的时候操作是一个技巧 。经过这个操作,使得原先8G多的表,一下子变成了2G多 。
北大青鸟设计培训:mysql数据库的优化方法?我们都知道 , 服务器数据库的开发一般都是通过java或者是PHP语言来编程实现的,而为了提高我们数据库的运行速度和效率,数据库优化也成为了我们每日的工作重点,今天,昌平IT培训就一起来了解一下mysql服务器数据库的优化方法 。
为什么要了解索引真实案例案例一:大学有段时间学习爬虫,爬取了知乎300w用户答题数据,存储到mysql数据中 。

推荐阅读