`
kabike
  • 浏览: 610898 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

mysql Partition(分区)

阅读更多
表数据量大的时候一般都考虑水平拆分,即所谓的sharding.不过mysql本身具有分区功能,可以实现一定程度
的水平切分.
mysql是具有MERGE这种引擎的,就是把一些结构相同的MyIASM表作为一个表使用,但是我觉得 MERGE不如partition实用,
因为MERGE会在所有的底层表上查询,而partition只在相应的分区上查询.
建立了两个表,分别为分区和未分区的,分区表按年进行分区.
CREATE TABLE `20130117date_par` (
  `content` varchar(20) NOT NULL,
  `create_time` datetime NOT NULL,
  KEY `20130117date_idx_date` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY RANGE (YEAR(create_time))
(PARTITION p2009 VALUES LESS THAN (2010),
 PARTITION p2010 VALUES LESS THAN (2011),
 PARTITION p2011 VALUES LESS THAN (2012),
 PARTITION p2012 VALUES LESS THAN (2013),
 PARTITION p2013 VALUES LESS THAN (2014))

CREATE TABLE `20130117date` (
  `content` varchar(20) NOT NULL,
  `create_time` datetime NOT NULL,
  KEY `20130117date_idx_date` (`create_time`)
) ENGINE=InnoDB

用sp向分区表和普通表各插入了90w条随机数据.
用mysqlslap进行下测试

不用分区表
select SQL_NO_CACHE * from 20130117date
where create_time BETWEEN '2013-01-01' and '2013-01-02';
select SQL_NO_CACHE * from 20130117date
where create_time BETWEEN '2012-12-25' and '2013-01-05';

引用

Benchmark
        Average number of seconds to run all queries: 0.881 seconds
        Minimum number of seconds to run all queries: 0.062 seconds
        Maximum number of seconds to run all queries: 3.844 seconds
        Number of clients running queries: 1
        Average number of queries per client: 2
Benchmark
        Average number of seconds to run all queries: 0.703 seconds
        Minimum number of seconds to run all queries: 0.062 seconds
        Maximum number of seconds to run all queries: 1.922 seconds
        Number of clients running queries: 1
        Average number of queries per client: 2
Benchmark
        Average number of seconds to run all queries: 1.250 seconds
        Minimum number of seconds to run all queries: 0.109 seconds
        Maximum number of seconds to run all queries: 4.032 seconds
        Number of clients running queries: 1
        Average number of queries per client: 2


用分区表
select SQL_NO_CACHE * from 20130117date_par
where create_time BETWEEN '2013-01-01' and '2013-01-02';
select SQL_NO_CACHE * from 20130117date_par
where create_time BETWEEN '2012-12-25' and '2013-01-05';

引用

Benchmark
        Average number of seconds to run all queries: 0.068 seconds
        Minimum number of seconds to run all queries: 0.047 seconds
        Maximum number of seconds to run all queries: 0.110 seconds
        Number of clients running queries: 1
        Average number of queries per client: 2
Benchmark
        Average number of seconds to run all queries: 0.250 seconds
        Minimum number of seconds to run all queries: 0.031 seconds
        Maximum number of seconds to run all queries: 1.078 seconds
        Number of clients running queries: 1
        Average number of queries per client: 2
Benchmark
        Average number of seconds to run all queries: 0.046 seconds
        Minimum number of seconds to run all queries: 0.046 seconds
        Maximum number of seconds to run all queries: 0.047 seconds
        Number of clients running queries: 1
        Average number of queries per client: 2
      
看来性能还是有一定的提升的.
      
执行
explain PARTITIONS select * from 20130117date_par
where create_time BETWEEN '2012-01-01' and '2012-01-02';

可以看出这个query只扫描了p2012这个分区.
而且分区表的好处在于维护比较方便.比如2009年的数据不需要了,分区表的方法为
alter table 20130117date_par drop PARTITION p2009

不到1s就行了
普通表为
delete from 20130117date
where create_time BETWEEN '2009-01-01' and '2010-01-01'

用了10.25s左右
0
1
分享到:
评论
2 楼 houyujiangjun 2013-04-04  
获益良多,楼主给力
1 楼 guoht 2013-01-31  
依赖mysql自身的partions,在小数据量上的处理,看来性能也不错。这是个不错的mysql优化技巧。

相关推荐

    MYSQL 通过分区(Partition)提升MySQL性能

    ### MySQL通过分区(Partition)提升性能 在数据库管理和优化领域,分区是一种常用的技术手段,它可以帮助提高查询效率、简化数据管理以及改善系统整体性能。本文将深入探讨如何利用MySQL中的分区功能来提升数据库...

    创建mysql表分区的方法

    【MySQL 表分区详解】 MySQL 表分区是一种高级的数据组织技术,它允许将大型表分成较小、更易管理和处理的部分。这种技术对于处理海量数据,尤其是超过亿级别的数据集非常有效,可以显著提升查询性能和数据管理效率...

    MySQL分区表自动创建及删除存储过程

    MySQL分区表是一种优化大型数据表查询效率的技术,它将一个大表分成多个逻辑上相连但物理上独立的部分,每个部分称为一个分区。分区可以按照不同的策略进行,如范围、哈希、列表或复合分区。这样做有助于提高数据...

    mysql表分区

    MySQL表分区是数据库管理系统(DBMS)中用于提高大数据量表的存储性能和管理效率的一种技术。通过对一个大表进行分区,可以将数据分散存储到多个物理区域中,从而改善性能,尤其是在涉及大量读写操作的场景中。MySQL...

    mysql实现自动创建与删除分区

    MySQL数据库在大数据处理中扮演着重要角色,而分区技术是其优化查询性能的关键特性之一。本文将深入探讨如何实现MySQL的自动创建与删除分区,主要关注时间分区,并介绍相关存储过程和事件的设置。 首先,我们需要...

    MySQL 分区

    MySQL分区是一种数据库优化技术,它将大型表分成更小、更易管理的部分,每个部分称为一个分区。这种技术有助于提高查询性能,特别是对于那些需要处理大量数据或执行复杂查询的应用程序。MySQL支持多种分区类型,包括...

    MySQL分区分表方案实践手册

    要检查MySQL是否支持分区功能,可以通过执行`SHOW VARIABLES LIKE '%partition%'`命令来查看。MySQL从5.1版本开始正式支持分区功能。 #### 二、MySQL分区类型 根据分区规则的不同,MySQL支持多种分区类型: - **...

    MySQL分区管理器MySQLPartitionManager.zip

    MySQL Partition Manager 是雅虎开源的 MySQL 分区管理器。它可以帮助你以最小的配置自动创建、维护、清除分区。 标签:MySQL

    MySql数据分区操作之新增分区操作

    首先,尝试直接通过`ALTER TABLE`语句添加分区到非分区表会导致错误,MySQL会返回`ERROR 1505 <HY000>: Partition management on a not partitioned table is not possible`。正确的方法是创建一个新的具有相同结构...

    (mysql面试题)MySQL中的分区表的概念及其作用及代码展示.txt

    ### MySQL中的分区表概念及其作用 #### 一、分区表定义 在MySQL中,分区表是一种高级技术,它允许用户将一个大型表物理地分割成若干个较小的部分,即分区。这种分割方式不仅可以显著提高查询效率,还可以简化数据...

    MySQL分区实战

    ### MySQL 分区实战详解 #### 一、MySQL分区概述与应用场景 在当今互联网行业中,MySQL数据库作为最常用的关系型数据库之一,在数据管理方面扮演着极其重要的角色。随着数据量的不断增长,对数据库性能的要求也日...

    MySQL中创建数据表Range分区.pdf

    在介绍MySQL中创建数据表的Range分区之前,首先需要了解分区的概念。分区是将一个表中的数据分成多个更小的、更易于管理的部分的技术。这通常用于大型数据库,可以提高查询性能,便于数据维护和备份。MySQL支持多种...

    mysql分区文档

    MySQL 分区是数据库管理系统中的一种优化策略,它将大型表的数据分布在不同的物理存储上,以提高查询性能和便于管理大量数据。分区的本质是将一张大表逻辑上分成多个部分,但用户在操作时仍然将其视为单个表。MySQL ...

    MySQL交换分区的实例详解

    MySQL交换分区的实例详解 前言 在介绍交换分区之前,我们先了解一下 mysql 分区。 数据库的分区有两种:水平分区和垂直分区。而MySQL暂时不支持垂直分区,因此接下来说的都是水平分区。水平分区即:以行为单位对表...

    mysql-分区

    MySQL 分区(Partition)是一种数据库优化技术,用于将大型表的数据分布到多个物理存储段,以提高查询性能和管理效率。分区通常适用于处理大量数据的表,尤其在数据仓库环境中非常常见。以下是对MySQL分区的一些关键...

    mysql如何进行分区-mysql分区有哪些方法.docx

    通过 `SHOW VARIABLES LIKE '%partition%'` 命令,可以检查 MySQL 服务器是否支持分区功能。 使用分区能有效管理和优化大数据量的表,但需要根据具体的应用场景和需求来选择合适的分区策略,同时也要考虑到对应用...

    mysql如何进行分区-mysql分区有哪些方法.pdf

    MySQL 数据库是一个广泛使用的开源关系型数据库管理系统,尤其在 PHP Web 开发中极其...在确认 MySQL 服务器支持分区功能后(通过 `SHOW VARIABLES LIKE '%partition%'` 查询),可以进一步考虑分区的具体实现方式。

    mysql-partition-and-Index.rar_partition

    在“mysql-partition-and-Index.wps”文件中,你将详细了解到如何在MySQL中创建分区和索引,包括相关的SQL语句、最佳实践以及通过实例演示来展示这些概念的实际应用。理解并熟练运用这些知识,可以帮助你更有效地...

Global site tag (gtag.js) - Google Analytics