- 浏览: 610898 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
fei33423:
同意你的说法. hbase 的强一致性分为两部分来说. 数据分 ...
浅谈Hbase 的强一致性 -
zengwenbo5566:
,高人,刚安装了 genymotion 那个附带 virtu ...
VirtualBox报错Unable to load R3 module GetLastError=1790 (VERR_UNRESOLVED_ERROR -
kabike:
QQ1289714862 写道这代码有问题吧 bar1 bar ...
AtomicBoolean运用 -
QQ1289714862:
这代码有问题吧 bar1 bar2 那来的 你是不是new了两 ...
AtomicBoolean运用 -
DEMONU:
需要依赖这么多东西啊
hbase 0.96和hadoop 2.2 java 客户端的jar依赖
表数据量大的时候一般都考虑水平拆分,即所谓的sharding.不过mysql本身具有分区功能,可以实现一定程度
的水平切分.
mysql是具有MERGE这种引擎的,就是把一些结构相同的MyIASM表作为一个表使用,但是我觉得 MERGE不如partition实用,
因为MERGE会在所有的底层表上查询,而partition只在相应的分区上查询.
建立了两个表,分别为分区和未分区的,分区表按年进行分区.
用sp向分区表和普通表各插入了90w条随机数据.
用mysqlslap进行下测试
不用分区表
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
用分区表
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
看来性能还是有一定的提升的.
执行
可以看出这个query只扫描了p2012这个分区.
而且分区表的好处在于维护比较方便.比如2009年的数据不需要了,分区表的方法为
不到1s就行了
普通表为
用了10.25s左右
的水平切分.
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左右
评论
2 楼
houyujiangjun
2013-04-04
获益良多,楼主给力
1 楼
guoht
2013-01-31
依赖mysql自身的partions,在小数据量上的处理,看来性能也不错。这是个不错的mysql优化技巧。
发表评论
-
mysql 5.7关闭password validation,为root设置空密码
2018-05-20 11:44 0在centos 7.4上yum安装了mysql 5.7后,发现 ... -
centos系统下mysql load data infile报错(ERROR 29 (HY000): File '/tmp/data.txt' not fo)
2014-11-10 17:00 1001执行load data infile报错 引用ERROR 29 ... -
CP还是AP?
2013-09-11 11:30 7295根据CAP理论,分布式存储系统最多只能满足其中两项.因为P是必 ... -
mysql大战mongodb
2013-04-03 21:39 7389nosql真是风起云涌,其中mongodb号称是比较像传统关系 ... -
innodb index的DDL
2013-04-03 21:14 1029mysql的innodb表,如果想创建一个secondary ... -
mysql多列索引(Multiple-Part Index)多个列上range scan时使用in
2013-03-18 18:30 2414show create table 20130314t1 ... -
innodb不同事务隔离级别下行锁的释放
2013-03-13 19:37 4370innodb使用的是行锁,原来一直以为InnoDB不是只在最终 ... -
innodb的mvcc和read view
2013-03-03 12:18 6424最近读High Performance MySQL,里面提到了 ... -
Innodb log buffer的flush
2013-03-03 10:31 2535innodb为了保持事务的特性,需要redo log的支持, ... -
mysql case ... when语句的几个用法
2013-02-25 19:54 4002一般情况下,case ...when都 ... -
mysql快速导入数据
2013-02-21 23:28 2088mysql一般导入导出数据有两种方式,1是导出insert语句 ... -
mysql的Late row lookups(延迟row查找)
2013-01-30 19:47 1845CREATE TABLE `20130122handler ... -
innodb的buffer pool
2013-01-28 23:20 1790innodb是有buffer pool机制的,可以参考 htt ... -
mysql直接通过handler读取数据
2013-01-24 21:16 1478前几天在mysql文档中发现了它有个handlerhttp:/ ... -
mysql自带的性能测试工具mysqlslap
2013-01-24 21:14 1546想测试一下mysql的性能,可以使用它自带的工具mysqlsl ... -
mysql timestamp和int存储时间
2013-01-09 16:25 7800show create table 20130107date; ... -
[转载]MySQL索引背后的数据结构及算法原理
2012-12-29 16:46 928今天看到了一篇好文章,MySQL索引背后的数据结构及算法原理, ... -
mysql备份数据库权限
2012-11-12 17:35 1279不想用root用户备份mysql数据库,于是创建了专门用来备份 ... -
mysql的timestamp类型的列
2012-11-11 20:16 800用Mysql Query Browser 创建的表的某个列类型 ... -
mysql的PreparedStatement
2012-11-11 20:14 2218环境为 mysql 5.1.39 mysql-connecto ...
相关推荐
### MySQL通过分区(Partition)提升性能 在数据库管理和优化领域,分区是一种常用的技术手段,它可以帮助提高查询效率、简化数据管理以及改善系统整体性能。本文将深入探讨如何利用MySQL中的分区功能来提升数据库...
【MySQL 表分区详解】 MySQL 表分区是一种高级的数据组织技术,它允许将大型表分成较小、更易管理和处理的部分。这种技术对于处理海量数据,尤其是超过亿级别的数据集非常有效,可以显著提升查询性能和数据管理效率...
MySQL分区表是一种优化大型数据表查询效率的技术,它将一个大表分成多个逻辑上相连但物理上独立的部分,每个部分称为一个分区。分区可以按照不同的策略进行,如范围、哈希、列表或复合分区。这样做有助于提高数据...
MySQL表分区是数据库管理系统(DBMS)中用于提高大数据量表的存储性能和管理效率的一种技术。通过对一个大表进行分区,可以将数据分散存储到多个物理区域中,从而改善性能,尤其是在涉及大量读写操作的场景中。MySQL...
MySQL数据库在大数据处理中扮演着重要角色,而分区技术是其优化查询性能的关键特性之一。本文将深入探讨如何实现MySQL的自动创建与删除分区,主要关注时间分区,并介绍相关存储过程和事件的设置。 首先,我们需要...
MySQL分区是一种数据库优化技术,它将大型表分成更小、更易管理的部分,每个部分称为一个分区。这种技术有助于提高查询性能,特别是对于那些需要处理大量数据或执行复杂查询的应用程序。MySQL支持多种分区类型,包括...
要检查MySQL是否支持分区功能,可以通过执行`SHOW VARIABLES LIKE '%partition%'`命令来查看。MySQL从5.1版本开始正式支持分区功能。 #### 二、MySQL分区类型 根据分区规则的不同,MySQL支持多种分区类型: - **...
MySQL Partition Manager 是雅虎开源的 MySQL 分区管理器。它可以帮助你以最小的配置自动创建、维护、清除分区。 标签:MySQL
首先,尝试直接通过`ALTER TABLE`语句添加分区到非分区表会导致错误,MySQL会返回`ERROR 1505 <HY000>: Partition management on a not partitioned table is not possible`。正确的方法是创建一个新的具有相同结构...
### MySQL中的分区表概念及其作用 #### 一、分区表定义 在MySQL中,分区表是一种高级技术,它允许用户将一个大型表物理地分割成若干个较小的部分,即分区。这种分割方式不仅可以显著提高查询效率,还可以简化数据...
### MySQL 分区实战详解 #### 一、MySQL分区概述与应用场景 在当今互联网行业中,MySQL数据库作为最常用的关系型数据库之一,在数据管理方面扮演着极其重要的角色。随着数据量的不断增长,对数据库性能的要求也日...
在介绍MySQL中创建数据表的Range分区之前,首先需要了解分区的概念。分区是将一个表中的数据分成多个更小的、更易于管理的部分的技术。这通常用于大型数据库,可以提高查询性能,便于数据维护和备份。MySQL支持多种...
MySQL 分区是数据库管理系统中的一种优化策略,它将大型表的数据分布在不同的物理存储上,以提高查询性能和便于管理大量数据。分区的本质是将一张大表逻辑上分成多个部分,但用户在操作时仍然将其视为单个表。MySQL ...
MySQL交换分区的实例详解 前言 在介绍交换分区之前,我们先了解一下 mysql 分区。 数据库的分区有两种:水平分区和垂直分区。而MySQL暂时不支持垂直分区,因此接下来说的都是水平分区。水平分区即:以行为单位对表...
MySQL 分区(Partition)是一种数据库优化技术,用于将大型表的数据分布到多个物理存储段,以提高查询性能和管理效率。分区通常适用于处理大量数据的表,尤其在数据仓库环境中非常常见。以下是对MySQL分区的一些关键...
通过 `SHOW VARIABLES LIKE '%partition%'` 命令,可以检查 MySQL 服务器是否支持分区功能。 使用分区能有效管理和优化大数据量的表,但需要根据具体的应用场景和需求来选择合适的分区策略,同时也要考虑到对应用...
MySQL 数据库是一个广泛使用的开源关系型数据库管理系统,尤其在 PHP Web 开发中极其...在确认 MySQL 服务器支持分区功能后(通过 `SHOW VARIABLES LIKE '%partition%'` 查询),可以进一步考虑分区的具体实现方式。
在“mysql-partition-and-Index.wps”文件中,你将详细了解到如何在MySQL中创建分区和索引,包括相关的SQL语句、最佳实践以及通过实例演示来展示这些概念的实际应用。理解并熟练运用这些知识,可以帮助你更有效地...