没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
 
                
            转帖|其它|编辑:郝浩|2011-02-11 14:46:17.000|阅读 869 次
概述:本文主要介绍MySQL分表的详细设计与应用,希望对大家有帮助。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法。
首先,我们需要想好到底分多少个表,前提当然是满足应用。这里我使用了一个比较简单的分表方法,就是根据自增id的尾数来分,也就是说分0-9一共10个表,其取值也很好做,就是对10进行取模。另外,还可以根据某一字段的md5值取其中几位进行分表,这样的话,可以分的表就很多了。
好了,先来创建表吧,代码如下
Sql代码
1.CREATE TABLE `test`.`article_0` ( 
2.`id` BIGINT( 20 ) NOT NULL , 
3.`subject` VARCHAR( 200 ) NOT NULL , 
4.`content` TEXT NOT NULL , 
5.PRIMARY KEY ( `id` ) 
6.) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci 
7. 
8.CREATE TABLE `test`.`article_1` ( 
9.`id` BIGINT( 20 ) NOT NULL , 
10.`subject` VARCHAR( 200 ) NOT NULL , 
11.`content` TEXT NOT NULL , 
12.PRIMARY KEY ( `id` ) 
13.) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci 
14. 
15.CREATE TABLE `test`.`article_2` ( 
16.`id` BIGINT( 20 ) NOT NULL , 
17.`subject` VARCHAR( 200 ) NOT NULL , 
18.`content` TEXT NOT NULL , 
19.PRIMARY KEY ( `id` ) 
20.) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci 
21. 
22.CREATE TABLE `test`.`article_3` ( 
23.`id` BIGINT( 20 ) NOT NULL , 
24.`subject` VARCHAR( 200 ) NOT NULL , 
25.`content` TEXT NOT NULL , 
26.PRIMARY KEY ( `id` ) 
27.) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci 
28. 
29.CREATE TABLE `test`.`article_4` ( 
30.`id` BIGINT( 20 ) NOT NULL , 
31.`subject` VARCHAR( 200 ) NOT NULL , 
32.`content` TEXT NOT NULL , 
33.PRIMARY KEY ( `id` ) 
34.) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci 
35. 
36.CREATE TABLE `test`.`article_5` ( 
37.`id` BIGINT( 20 ) NOT NULL , 
38.`subject` VARCHAR( 200 ) NOT NULL , 
39.`content` TEXT NOT NULL , 
40.PRIMARY KEY ( `id` ) 
41.) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci 
42. 
43.CREATE TABLE `test`.`article_6` ( 
44.`id` BIGINT( 20 ) NOT NULL , 
45.`subject` VARCHAR( 200 ) NOT NULL , 
46.`content` TEXT NOT NULL , 
47.PRIMARY KEY ( `id` ) 
48.) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci 
49. 
50.CREATE TABLE `test`.`article_7` ( 
51.`id` BIGINT( 20 ) NOT NULL , 
52.`subject` VARCHAR( 200 ) NOT NULL , 
53.`content` TEXT NOT NULL , 
54.PRIMARY KEY ( `id` ) 
55.) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci 
56. 
57.CREATE TABLE `test`.`article_8` ( 
58.`id` BIGINT( 20 ) NOT NULL , 
59.`subject` VARCHAR( 200 ) NOT NULL , 
60.`content` TEXT NOT NULL , 
61.PRIMARY KEY ( `id` ) 
62.) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci 
63. 
64.CREATE TABLE `test`.`article_9` ( 
65.`id` BIGINT( 20 ) NOT NULL , 
66.`subject` VARCHAR( 200 ) NOT NULL , 
67.`content` TEXT NOT NULL , 
68.PRIMARY KEY ( `id` ) 
69.) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci
好了10个表创建完毕了,需要注意的是,这里的id不能设为自增,而且所有的表结构必须一致,包括结构,类型,长度,字段的顺序都必须一致 那么对于这个id如何取得呢?后面我会详细说明。现在,我们需要一个合并表,用于查询,创建合并表的代码如下
1.CREATE TABLE `test`.`article` ( 
2.`id` BIGINT( 20 ) NOT NULL , 
3.`subject` VARCHAR( 200 ) NOT NULL , 
4.`content` TEXT NOT NULL , 
5.PRIMARY KEY ( `id` ) 
6.) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=0 UNION=(`article_0`,`article_1`,`article_2`,`article_3`,`article_4`,`article_5`,`article_6`,`article_7`,`article_8`,`article_9`);
  这里INSERT_METHOD=0在某些版本可能不工作,需要改成INSERT_METHOD=NO 
注意,合并表也必须和前面的表有相同的结构,类型,长度,包括字段的顺序都必须一致 这里的INSERT_METHOD=0表示不允许对本表进行insert操作。好了,当需要查询的时候,我们可以只对article这个表进行操作就可以了,也就是说这个表仅仅只能进行select操作
那么对于插入也就是insert操作应该如何来搞呢,首先就是获取唯一的id了,这里就还需要一个表来专门创建id,代码如下
Java代码
1.CREATE TABLE `test`.`create_id` ( 
2.`id` BIGINT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY 
3.) ENGINE = MYISAM
也就是说,当我们需要插入数据的时候,必须由这个表来产生id值,我的php代码的方法如下
Java代码
1.function get_AI_ID() { 
2.    $sql  = "insert into create_id (id) values('')"; 
3.    $this->db->query($sql); 
4.    return $this->db->insertID(); 
5.}
好了,现在假设我们要插入一条数据了,应该怎么操作呢?还是继续看代码吧
Java代码
1.function new_Article() { 
2.    $id  = $this->get_AI_ID(); 
3.    $table_name = $this->get_Table_Name($id); 
4.    $sql = "insert into {$table_name} (id,subject,content) values('{$id}','测试标题','测试内容')"; 
5.    $this->db->query($sql); 
6.} 
7./** 
8. * 用于根据id获取表名 
9. */ 
10.function get_Table_Name($id) { 
11.    return 'article_'.intval($id)%10; 
12.}
其实很简单的,对吧,就是先获取id,然后根据id获取应该插入到哪个表,然后就很简单了。
对于update的操作我想应该不需要再说了吧,无非是有了id,然后获取表名,然后进行update操作就好了。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@ke049m.cn
文章转载自:网络转载



 
					接DevExpress原厂商通知,将于近日上调旗下产品授权价格,现在下单客户可享受优惠报价!
 
					面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
 
					本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
 
					本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@ke049m.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
 
                 
             半岛外围网上直营
半岛外围网上直营  
					 
					 
					 
					 
					