当前位置: 首页 » 网站建设 » 网站建设知识 » 正文

mysql分表的3种方法

发布时间:2025-07-22 以下文章来源于网友投稿,内容仅供参考!

mysql分表的3种方法。

一,先说一下为什么要分表

当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。

根据个人经验,mysql执行一个sql的过程如下:
1,接收到sql;2,把sql放到排队队列中 ;3,执行sql;4,返回执行结果。在这个执行过程中最花时间在什么地方呢?第一,是排队等待的时间,第二,sql的执行时间。其实这二个是一回事,等待的同时,肯定有sql在执行。所以我们要缩短sql的执行时间。

mysql中有一种机制是表锁定和行锁定,为什么要出现这种机制,是为了保证数据的完整性,我举个例子来说吧,如果有二个sql都要修改同一张表的同一条数据,这个时候怎么办呢,是不是二个sql都可以同时修改这条数据呢?很显然mysql对这种情况的处理是,一种是表锁定(myisam存储引擎),一个是行锁定(innodb存储引擎)。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作。如果数据太多,一次执行的时间太长,等待的时间就越长,这也是我们为什么要分表的原因。

二,分表

1,做mysql集群,例如:利用mysql cluster ,mysql proxy,mysql replication,drdb等等

有人会问mysql集群,根分表有什么关系吗?虽然它不是实际意义上的分表,但是它启到了分表的作用,做集群的意义是什么呢?为一个数据库减轻负担,说白了就是减少sql排队队列中的sql的数量,举个例子:有10个sql请求,如果放在一个数据库服务器的排队队列中,他要等很长时间,如果把这10个sql请求,分配到5个数据库服务器的排队队列中,一个数据库服务器的队列中只有2个,这样等待时间是不是大大的缩短了呢?这已经很明显了。所以我把它列到了分表的范围以内,我做过一些mysql的集群:

linux mysql proxy 的安装,配置,以及读写分离

mysql replication 互为主从的安装及配置,以及数据同步

优点:扩展性好,没有多个分表后的复杂操作(php代码)

缺点:单个表的数据量还是没有变,一次操作所花的时间还是那么多,硬件开销大。

2,预先估计会出现大数据量并且访问频繁的表,将其分为若干个表

这种预估大差不差的,论坛里面发表帖子的表,时间长了这张表肯定很大,几十万,几百万都有可能。 聊天室里面信息表,几十个人在一起一聊一个晚上,时间长了,这张表的数据肯定很大。像这样的情况很多。所以这种能预估出来的大数据量表,我们就事先分出个N个表,这个N是多少,根据实际情况而定。以聊天信息表为例:

我事先建100个这样的表,message_00,message_01,message_02……….message_98,message_99.然后根据用户的ID来判断这个用户的聊天信息放到哪张表里面,你可以用hash的方式来获得,可以用求余的方式来获得,方法很多,各人想各人的吧。下面用hash的方法来获得表名:

查看复制打印?function get_hash_table(table,userid) {str=crc32(userid); if(str<0){
$hash="0".substr(abs($str),0,1);}else{
$hash=substr($str,0,2);}
returntable.“_”.$hash;
}

echo get_hash_table(‘message’,‘user18991’); //结果为message_10echo get_hash_table(‘message’,‘user34523’); //结果为message_13
?>查看复制打印?mysql> CREATE TABLE IF NOT EXISTS user1 (-> id int(11) NOT NULL AUTO_INCREMENT,
-> name varchar(50) DEFAULT NULL,-> sex int(1) NOT NULL DEFAULT ’0’,
-> PRIMARY KEY (id)-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Query OK, 0 rows affected (0.05 sec)

mysql> CREATE TABLE IF NOT EXISTS user2 (-> id int(11) NOT NULL AUTO_INCREMENT,
-> name varchar(50) DEFAULT NULL,-> sex int(1) NOT NULL DEFAULT ’0’,
-> PRIMARY KEY (id)-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO user1 (name, sex) VALUES(’张映’, 0);Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO user2 (name, sex) VALUES(’tank’, 1);
Query OK, 1 row affected (0.00 sec)

mysql> CREATE TABLE IF NOT EXISTS alluser (-> id int(11) NOT NULL AUTO_INCREMENT,
-> name varchar(50) DEFAULT NULL,-> sex int(1) NOT NULL DEFAULT ’0’,
-> INDEX(id)-> ) TYPE=MERGE UNION=(user1,user2) INSERT_METHOD=LAST AUTO_INCREMENT=1 ;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> select id,name,sex from alluser;+—-+——–+—–+
| id | name | sex |+—-+——–+—–+
| 1 | 张映 | 0 || 1 | tank | 1 |
+—-+——–+—–+2 rows in set (0.00 sec)
mysql> INSERT INTO alluser (name, sex) VALUES(’tank2’, 0);
Query OK, 1 row affected (0.00 sec)

mysql> select id,name,sex from user2-> ;
+—-+——-+—–+| id | name | sex |
+—-+——-+—–+| 1 | tank | 1 |
| 2 | tank2 | 0 |+—-+——-+—–+
2 rows in set (0.00 sec)mysql> UPDATE alluser SET sex=REPLACE(sex, 0, 1) where id=2;Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from alluser;+—-+——–+—–+
| id | name | sex |+—-+——–+—–+
| 1 | 张映 | 0 || 1 | tank | 1 |
| 2 | tank2 | 1 |+—-+——–+—–+
3 rows in set (0.00 sec)
  • • 宝塔面板中如何在终端重启服务器

    宝塔面板中如何在终端重启服务器宝塔面板是一款功能强大的服务器管理面板,可以帮助管理员简化服务器操作。当需要重启服务器时,

  • • 宝塔面板如何在线编辑

    宝塔面板如何在线编辑宝塔面板是一款功能强大的服务器管理面板,它提供了很多方便实用的功能。其中之一就是在线编辑文件的功能,

  • • 宝塔面板需要什么

    宝塔面板需要什么宝塔面板是一款非常流行的服务器管理软件,广泛应用于网站搭建和服务器管理。使用宝塔面板可以简化服务器操作,

  • • 如何备案阿里云服务器地址

    如何备案阿里云服务器地址备案是指互联网信息服务提供者按照国家相关规定,将其域名与服务器地址等信息进行报备并获得许可的过程

  • • 高级宝塔面板怎么拆卸视频

    高级宝塔面板怎么拆卸视频今天我们来分享一下高级宝塔面板的拆卸方法。以下是详细步骤:首先,确保你已经备份了所有数据,并且登

  • ehviewer官网下载网站入口
    51漫画APP最新官方版下载
    免费追剧app软件下载
    茶杯狐cupfox官方app下载
    海马云电脑app下载
    joiplay官方下载
    局域网IP扫描软件下载
    暗部口袋2025最新版下载
    雷霆加器速官网下载
    快看浏览器下载
    失信人信息查询:http://zxgk.court.gov.cn
    2025白露是哪一天?白露是几月几日几时几分几秒
    白露是几月几日2025?2025年白露阳历时间
    无尽冬日最强阵容是什么?
    无尽冬日英雄培养顺序
    二手房需要维修基金吗?维修基金使用的条件
    买房摇号要摇到号才能选房吗?摇号选房的大概流程
    购买法拍房需要交哪些税费?买法拍房需注意什么问题
    2025年阅兵具体日期是哪天?2025年阅兵的具体时间表
    2025年9月3日北京交通管制情况如何?2025年阅兵期间如何绕行北京?