`
youyu4
  • 浏览: 440157 次
社区版块
存档分类
最新评论

MySQL分表

 
阅读更多

MySQL分表

 

为什么要分表

 

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

 

    根据个人经验,mysql执行一个sql的过程如下:

  • 接收到sql;
  • 把sql放到排队队列中 ;
  • 执行sql;
  • 返回执行结果。

    在这个执行过程中最花时间在什么地方呢?第一,是排队等待的时间,第二,sql的执行时间。其实这二个是一回事,等待的同时,肯定有sql在执行。所以我们要缩短sql的执行时间。

 

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

 

 

什么时候分区什么时候分表

1. 其实分区分表都是为了提高MySQL的性能,为了提高并发性

2. 大访问量,并且表数据比较多的情况,建议分表和分区结合

3. 访问量不大,但是数据很多,可以只是分区

 

 

分表的方法(大致分三种)

 

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

也不算真正意义上的分表,只是做了主从数据库。

 

优点:读写分离,数据同步,扩展性好,没有多个分表后的复杂操作(php代码)

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

 

 

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

将一个表拆分成了多个表

 

1.按自然时间来分表(按年月拆分)

2.按数字数据分表数求余

3.按md5值来分表

 

优点:避免一张表出现几百万条数据,缩短了一条sql的执行时间

缺点:当一种规则确定时,打破这条规则会很麻烦,上面的例子中我用的hash算法是crc32,如果我现在不想用这个算法了,改用md5后,会使同一个用户的消息被存储到不同的表中,这样数据乱套了。扩展性很差。

 

 

利用merge存储引擎来实现分表

这种方法比较适合,那些没有事先考虑,而已经出现了得,数据查询慢的情况。这个时候如果要把已有的大数据量表分开比较痛苦,最痛苦的事就是改代码,因为程序里面的sql语句已经写好了,现在一张表要分成几十张表,甚至上百张表,这样sql语句是不是要重写呢?

 

CREATE TABLE t1 (  a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,  message CHAR(20))engine=myisam ;
CREATE TABLE t2 (  a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,  message CHAR(20))engine=myisam ;
CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20)) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;

 参考:http://blog.csdn.net/rorntuck7/article/details/50668060

 

 

参考:

http://www.cnblogs.com/freeliver54/archive/2011/01/28/1947167.html

http://www.jb51.net/article/68990.htm

分享到:
评论

相关推荐

    MySQL分表及分表后插入sql

    MySQL分表及分表后插入sql语句,表为订单表,可以参考一下

    Node.js 实现的 MySQL 分表分库中间件,用于海量数据的分布式集群储存管理和高并发访问。.zip

    本文将深入探讨基于Node.js实现的MySQL分表分库中间件,它在分布式集群环境中起到至关重要的作用。 首先,Node.js是一种流行的JavaScript运行环境,它允许开发人员使用JavaScript进行服务器端编程。Node.js的异步非...

    mysql分表分库demo

    MySQL 分表分库 Demo MySQL 分表分库是指将大型数据库表分割成多个小表,以提高数据库的性能和可扩展性。随着业务数据的增长,数据库表中的数据不断增加,如果不加以控制,数据库的性能将会下降,影响业务的发展。 ...

    MySQL分表和分区最佳攻略word

    MySQL分表和分区最佳攻略 word版本,

    Python与MySQL分表分库实战

    本篇文章将深入探讨"Python与MySQL分表分库实战"这一主题,帮助你理解如何有效地利用这两种技术来优化数据库性能和处理大数据。 首先,我们需要理解“分表分库”这一概念。随着数据量的增长,单一数据库可能会面临...

    Python+MySQL分表分库实战

    "Python+MySQL分表分库实战"的主题,正是探讨如何结合这两者,以解决大数据存储和查询中的挑战。 分表分库,也称为数据库水平扩展,是应对海量数据的常用策略。当单个数据库表的数据量过大时,会导致查询效率降低,...

    mysql 分表

    关于mysql的分表技术实现方法。以及分表设计, 及简单的代码实例。

    MySQL分表和分区最佳攻略

    常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致...分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。

    mysql分表创建

    文件`mysql分表创建.sql`很可能包含了创建分表的SQL脚本,如创建新表、插入数据、设置分区等操作。具体操作时,应确保理解分表策略,合理选择分片键,避免数据热点,并测试分表后的查询性能。 总之,MySQL分表是...

    Mysql分表查询,哈希,范围,列表

    【MySQL分表查询】在大型数据库系统中,随着数据量的不断增长,单表的数据规模可能会变得非常庞大,导致查询效率下降,系统性能受到影响。此时,分表技术就显得尤为重要。MySQL提供了多种分表策略,如哈希分表、范围...

    基于hibernate的mysql分表分库实例-mysql-cluster-hibernate.zip

    "基于hibernate的mysql分表分库实例-mysql-cluster-hibernate.zip"这个压缩包文件提供了一个具体的解决方案,它涉及到Hibernate ORM框架与MySQL数据库集群的整合,旨在处理高并发、大数据量的业务场景。 **...

    Mysql分表分库-core-dbshard2.zip

    "Mysql分表分库-core-dbshard2.zip" 文件可能包含了一个名为 "core-dbshard2-master" 的项目,这个项目很可能是关于MySQL数据库分库分表的实现方案或工具。 分库分表是一种水平扩展(Scaling Out)的方式,当单个...

    mysql分表分库-mysqlfenbaiofenku.zip

    MySQL 分表分库是数据库优化和扩展的一种策略,主要用于处理大数据量、高并发场景下的数据库性能问题。在大型互联网应用中,随着用户数量和数据规模的增长,单个数据库可能无法承受大量的读写操作,这时就需要采取...

    Node.js的MySQL分表分库访问中间件TribeDB.zip

    Node.js 的 MySQL 分表分库数据访问中间件,实现MySQL数据的分布式集群储存管理。在处理海量数据、高并发访问时,获得更加优越的性能及横向扩展能力。它包含以下主要特性: 可伸缩、高扩展的架构 ...

    Python+MySQL分表分库实战 - v1.0 - 运维生存时间 -(2016).mobi

    Python后端运维工程师的可靠参考书,重点介绍如何优化mysql数据库性能。

    MySQL分表实现上百万上千万记录分布存储的批量查询设计模式详解

    本文将深入探讨如何使用MySQL分表实现大规模数据的分布存储和批量查询设计模式。 首先,我们需要理解分表的概念。不同于MySQL 5.1引入的分区(Partitioning)功能,这里所说的分表是手动将一个大表根据特定字段(如...

    MySQL分表自增ID问题的解决方法

    这两种方法都旨在解决MySQL分表后生成唯一ID的挑战。使用Redis生成ID可以提供更好的并发性能,但需要额外的运维成本。在实际应用中,应根据系统需求、资源状况和并发水平选择合适的方法。同时,设计时要考虑扩展性和...

    MySQL分表和分区的具体实现方法

    MySQL数据库在处理大数据量时,可能会遇到性能瓶颈,这时就需要采取一些优化策略,其中分表和分区是常见的解决方案。本文将详细介绍这两种技术及其在MySQL中的具体实现。 **垂直分表**是将一个宽表(包含大量列)...

    mysql分表,分区的区别与联系借鉴.pdf

    MySQL中的分表和分区是两种不同的数据库优化策略,它们旨在管理和优化大数据量的表,以提升查询性能和系统效率。 **分表**是指将一张大表拆分成多个小表,每个小表都拥有完整的表结构,包括.MYD数据文件、.MYI索引...

Global site tag (gtag.js) - Google Analytics