没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2011-02-11 14:46:17.000|阅读 842 次
概述:本文主要介绍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@evget.com
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号