下面通过创建100张表来演示下1亿条数据的分表过程,具体请看下文代码。
创新互联公司主要为客户提供服务项目涵盖了网页视觉设计、VI标志设计、营销推广、网站程序开发、HTML5响应式成都网站建设、手机网站开发、微商城、网站托管及成都网站维护公司、WEB系统开发、域名注册、国内外服务器租用、视频、平面设计、SEO优化排名。设计、前端、后端三个建站步骤的完善服务体系。一人跟踪测试的建站服务标准。已经为成都玻璃钢坐凳行业客户提供了网站改版服务。
当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度。笔者做了一个简单的尝试,1亿条数据,分100张表。具体实现过程如下:
首先创建100张表:
$i=0;
while($i=99){
echo
"$newNumber
\r\n";
$sql="CREATE
TABLE
`code_".$i."`
(
`full_code`
char(10)
NOT
NULL,
`create_time`
int(10)
unsigned
NOT
NULL,
PRIMARY
KEY
(`full_code`),
)
ENGINE=MyISAM
DEFAULT
CHARSET=utf8";
mysql_query($sql);
$i++;
下面说一下我的分表规则,full_code作为主键,我们对full_code做hash
函数如下:
$table_name=get_hash_table('code',$full_code);
function
get_hash_table($table,$code,$s=100){
$hash
=
sprintf("%u",
crc32($code));
echo
$hash;
$hash1
=
intval(fmod($hash,
$s));
return
$table."_".$hash1;
}
这样插入数据前通过get_hash_table获取数据存放的表名。
最后我们使用merge存储引擎来实现一张完整的code表
CREATE
TABLE
IF
NOT
EXISTS
`code`
(
`full_code`
char(10)
NOT
NULL,
`create_time`
int(10)
unsigned
NOT
NULL,
INDEX(full_code)
)
TYPE=MERGE
UNION=(code_0,code_1,code_2.......)
INSERT_METHOD=LAST
;
这样我们通过select
*
from
code就可以得到所有的full_code数据了。
以上介绍就是本文的全部内容,希望对大家有所帮助。
function test_value($num){
$new_value = '';
$test_arr = array('100000000'='亿','10000'='万');//从大到小排列你想要的组合
$statu = true;
foreach ($test_arr as $key = $value) {
if($num=$key){
$new_value=intval($num/$key).$value;
$statu = false;
break;
}
}
if($statu){
$new_value=$num;
}
return $new_value;
}
//像下面这样调用函数即可
echo test_value(15123); //调用函数
echo 'br /';
echo test_value(112256); //调用函数
echo 'br /';
echo test_value(100000000); //调用函数
echo 'br /';
echo test_value(100000001); //调用函数
// 输出结果
// 1万
// 11万
// 1亿
// 1亿
理论上是可以的,但效率上就有问题了,这么大量的数据一般不会放一张表里面,都会考虑分表,然后考虑索引、数据库主从、服务器配置等,提高查询效率php+mysql可以处理亿级的数据吗