数据量大的时候 如何根据数据量 比如一个表存放200万的数据 达到这个数据 自动分表 php如何结合mysql进行分表 查询怎么查询?
解决方案 »
- 求建表SQL文及插入数据的SQL文,所有国家country 所有 省state
- ucenter接口实例中无法同步退出
- 求一学习PHP的网址
- 求助mysql_fetch_array(): supplied argument is not a valid MySQL result resource
- APP网站怎么做
- PHP支付宝接口,支付完之后页面跳转问题
- ucenter在Java中实现单点登录问题
- phpcms url 映射
- wamp+花生壳搭好服务器后,phpMyAdmin无法打开
- 从PHP 从服务器下载Excel 乱码
- Ecshop界面怎么修改!
- discuz 菜鸟,求赐教,本人2年java、业务php、android
将适当的字段根据range、hash……方式分区,我想一样能达到需求如此的好处是,在数据操作中,你不需要人为去判断数据从哪些表中查询,
//Mysql站点分表存储 获取当前城市ID的分表 10个网站链接存放一个表
private function catmysql($Site_id)
{
$n = 10; //10个网站为一个表
$X = $Site_id % $n;
$Y = $Site_id - $X;
if ($X == 0){
return $Site_id;
}
if ($X >=1 && $X<$n){
return $Y;
}
}
见很早前的一篇译文mysql 5.1新功能 -- 按日期分区,如果查询条件中没有正确利用到分区的字段,那么partition的效果为零
mysql 5.1.31之前的partition功能有较大的bug,会导致自增字段不能正常自增,怎么个不正常法?auto_increment值会非正常增长,突然比当前的最大id小很多,插入数据时导致duplicate key错误。
这些问题都能凑合着对付过去,但是partition功能和auto_increment似乎是天生的敌人。从使用习惯上来说,我们会把auto_increment字段设置为主键,这个字段要是unique的才比较稳妥,这个情况下如果希望用其它字段来进行分区的话,几乎就成了不可能的任务。以这张表为例:CREATE TABLE user ( id int auto_increment PRIMARY KEY, uid int, foo varchar(32) ) engine=myisam;这个时候试图以uid进行分区会怎么样?是以怎样的惨淡结局收场?变通的办法是对自增字段做一些调整,从mysql的手册来看,自增字段不一定要设置成主键,仅仅是普通的index也可以,那么把表结构换成下面这个样子,就可以分区成功。CREATE TABLE user ( id int auto_increment, uid int, foo varchar(32), index (id) ) engine=innodb PARTITION BY HASH (uid) PARTITIONS 4;我在实际环境中有一张表达到了几亿条数据,如果要用时下流行的sharding策略,必须在代码上做一些改动,当时偷了点懒直接使用partition功能,用了大半年倒也相安无事。只是分区表占用内存相当的大,如果有其它的表经常出现慢查询耗费服务器资源,那么雪崩效应就出现了,所有的查询都会堵塞变得非常慢。转的
原地址http://www.ooso.net/archives/519