`
liu86th
  • 浏览: 118388 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[mysql]数据库分区

 
阅读更多

 

mysql的分区技术理论

 

[1] 大数据存储

当mysql中一个表的总记录数超过了1000万,会出现性能的大幅度下降吗?答案是肯定的。但性能下降的比率由系统的架构、应用程序、数据库索引、服务器硬件等多种因素而定。数据库多大上亿的数据量,分表之后的单个表也已经突破千万,那么单个表的更新等均影响着系统的运行效率。甚至是一条简单的SQL都有可能压垮整个数据库,如整个表对某个字段的排序等。

 

[2] 解决方案

目前,针对海量数据的优化主要有2种方法:大表拆分小表的方式、SQL语句的优化

 

[3] SQL语句的优化:可以通过增加索引等来调整,但是数据量的增大将会导致索引的维护代价增大

 

[4] 大表拆小表

a.垂直分表 

 

table a(id,colspan1, colspan2, colspan3, colspan4, colspan5) => table a(id,colspan1, colspan2, colspan3) and table a( colspan4, colspan5)

 b.水平分表

 

 

table a(id,colspan1, colspan2, colspan3, colspan4, colspan5) id={1,1000}
table a(id,colspan1, colspan2, colspan3, colspan4, colspan5) id={2,1000}
...

 

 

 

[5] 水平分区技术将一个表拆分成多个表,比较常用的方式是将表中的记录按照某种Hash算法进行拆分,简单的拆分方法如取模方式。同样,这种分区方法也必须对前端的应用程序中的SQL进行修改方可使用。而且对于一个SQL,它可能会修改两个表,那么你必须得写成2个SQL语句从而可以完成一个逻辑的事务,使得程序的判断逻辑越来越复杂,这样也会导致程序的维护代价高,也就失去了采用数据库的优势。因此,分区技术可以有力地避免如上的弊端,成为解决海量数据存储的有力方法。

 

[6] MYSQL分区介绍 version>=5.1

MYSQL的分区技术不同于之前的分表技术,它与水平分表有点类似,但是它是在逻辑层进行的水平分表,对于应用程序而言它还是一张表,MYSQL5.1有5种分区类型:

 

(1) RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区

 

(2) LIST分区: 类似于按RANGE分区,区别在于LIST是基于列值匹配一个离散值集合的某个值来进行选择

 

(3) HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算,这个函数可以包含MYSQL中有效的,产生非负整数值的任何表达式。

 

(4)KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MYSQL服务器提供其自身的哈希函数。

 

[7] range分区示例

 

mysql>create table employees( 
	id int not null, 
	fname varchar(30), 
	lname varchar(30), 
	hire date not null default '1970-01-01', 
	separate date not null default '1999-01-01', 
	job_code int not null, 
	store_id int not null
)
partition by RANGE(store_id) (
	partition p0 values less than(6),
	partition p1 values less than(11),
	partition p2 values less than(16),
	partition p3 values less than(21)
);
//或
partition by RANGE(year(separate)) (
	partition p0 values less than (1991),
	partition p1 values less than (1996),
	partition p2 values less than (2000),
	partition p3 values less than MAXVALUE
);

 

 

[8] LIST分区示例

 

mysql>create table employees( 
	id int not null, 
	fname varchar(30), 
	lname varchar(30), 
	hire date not null default '1970-01-01', 
	separate date not null default '1999-01-01', 
	job_code int not null, 
	store_id int not null
)
partition by LIST(store_id) (
	partition pNorth values in(3,5,6,9,17),
	partition pEast values in (1,2,10,11,19,20),
	partition pWest values in (4,12,13,14,18),
	partition pCentral values in (7,8,15,16)
);

 

 

[9]HASH分区示例

 

mysql>create table employees( 
	id int not null, 
	fname varchar(30), 
	lname varchar(30), 
	hire date not null default '1970-01-01', 
	separate date not null default '1999-01-01', 
	job_code int not null, 
	store_id int not null
)
partition by HASH(year(hired))
partitions 4

 [10]分区类型、优点、缺点、共性

 

 

Range   优点:(适合与日期类型,支持复合分区) 
             缺点:(有限的分区)
	     共性:(一般针对某一列) 

List	 优点:(适合与有固定取值的列,支持复合分区)
         缺点:(有限的分区,插入记录在这一列的值,不在值List中,则数据丢失)
         共性:(一般针对某一列)      

Hash 优点:(线性Hash使得增加、删除、合并分区更快捷)
         缺点:(线性Hash的数据分布不均匀,而一般Hash的数据分布较均匀)
         共性:(一般针对某一列)  

Key	 优点:(列可以为字符型等其它非int类型)
	 缺点:(效率较之前的低,因为函数为复杂的函数(如.MD5或SHA函数))
	 共性:(一般针对某一列)

  

 

[11] mysql一些命令

 

a.\s 查看字符集 b. show engines; c. show plugins;

d. \db // 改变定界符 

 

 

[12] linux一些命令

 

a. watch -n1 ls -lh 隔一秒钟刷新一次结果 b.ctrl+F1\F2 切换终端

 

 

[13] 存储过程

mysql>create procedure p3()
	->begin
	->set @i=1;
	->while @i<10000 do
	->insert into t3 values(@i);
	->set @i=@i+1;
	->end while;
	->end //

mysql>show precedure status;

 

[14] innodb表数据结构

 

a.对于innodb的数据结构,首先要解决两个概念性的问题:共享表空间以及独占表空间

 

b.共享表空间:某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下。默认的文件名为:ibdata1初始化为10M。

 

c.独占表空间:每个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件。其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置中

 

d.

innodb_data_home_dir 		= "C:\mysql\data\"
innodb_log_group_home_dir 	= "C:\mysql\data\"
innodb_data_file_path 		= ibdata1:10M:autoextend
innodb_file_per_table	 	= 1
//以上的几个参数必须在一起加入

 

 

分享到:
评论

相关推荐

    MySQL数据库分区技术

    MySQL数据库分区技术,解决多并发问题,详细描述分区流程及操作步骤

    mysql 数据库表分区

    MySQL 数据库表分区是一种优化大数据查询的技术,尤其适用于存储海量数据的应用场景。通过将大表分成更小、更易管理的部分,分区可以提高查询性能,减少数据处理的时间,并且简化数据管理和备份过程。 1. **分区...

    深入解析Oracle与MySQL在数据库分区方面的显著差异

    Oracle和MySQL作为两款主流的数据库管理系统,在数据库分区方面各有特点和优势。本文将详细探讨Oracle与MySQL在数据库分区方面的不同之处,包括分区类型、创建和管理分区的语法,以及分区策略的应用场景。 Oracle和...

    MySQL数据库巡检手册 MySQL DBA必备

    MySQL数据库巡检手册是MySQL数据库管理员(DBA)在进行数据库管理和维护工作中非常重要的参考资料。巡检手册包含了数据库性能、安全、运行状况等方面的检查项,以确保数据库能够正常稳定运行,及时发现并解决潜在问题...

    什么是分表和分区 MySql数据库分区和分表方法

    MySQL数据库的分表和分区是两种常见的优化策略,旨在应对大数据量带来的性能问题。当一个表包含数百万甚至上千万的记录时,查询和插入操作可能会变得非常缓慢,导致整个数据库系统的性能下降。分表和分区的目标是...

    java连接mysql数据库(JDBC驱动).

    ### Java连接MySQL数据库(JDBC驱动) #### 软件下载 - **MySQL**: 版本 4.1.11 下载地址: [http://dev.mysql.com/downloads/mysql/4.1.html](http://dev.mysql.com/downloads/mysql/4.1.html) - **JDBC驱动**: ...

    MySQL数据库基础实例教程(第2版)(微课版)-教学课件.zip

    同时,也会探讨数据库分区策略,以及如何根据数据量和查询模式选择合适的分区方式。 第八章 数据库编程:学习者将接触MySQL的存储过程和函数,了解它们在处理复杂业务逻辑和事务管理中的应用。此外,还会讲解触发器...

    MySQL数据库应用从入门到精通_第2版

    MySQL数据库是世界上最受欢迎的开源关系型数据库之一,广泛应用于各种规模的企业、网站和应用程序中。本书《MySQL数据库应用从入门到精通_第2版》旨在帮助读者从零基础开始,逐步掌握MySQL的使用技巧和高级功能,...

    《MySQL数据库原理及应用》教案.rar

    《MySQL数据库原理及应用》是一门深入探讨关系型数据库管理系统MySQL的课程,旨在教授学生如何设计、创建和管理数据库,以及如何在实际应用场景中高效利用MySQL。教案详细涵盖了该课程的所有章节,为教学提供了全面...

    MySQL数据库原理及应用(第2版)(微课版)-配套教案.zip

    MySQL数据库是目前世界上最受欢迎的关系型数据库管理系统之一,尤其在互联网领域有着广泛的应用。《MySQL数据库原理及应用(第2版)(微课版)》是一本深入浅出介绍MySQL技术的教材,配合配套教案,旨在帮助学生和...

    MySQL数据库使用帮助文档

    MySQL数据库是世界上最受欢迎的开源关系型数据库之一,广泛应用于各种规模的企业、网站和应用程序中。这份"MySQL数据库使用帮助文档"是开发者在处理与数据库相关的Web应用程序时的重要参考资料。它包含了大量的信息...

    MySQL数据库考试练习题 mysql试题集 共28页.pdf

    根据提供的文件信息,我们可以推断出这份文档主要包含MySQL数据库相关的考试练习题目。MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),因其性能稳定、易于使用和成本低廉等特点,在互联网应用开发中非常...

    zabbix 5.0 mysql 数据库分表操作详细流程

    其中有每个命令的使用说明与注释。并增加了清理数据的方式。以及导入输入的注意事项

    MySQL 数据库系统设计实现与管理第六版课后习题答案

    MySQL数据库系统设计实现与管理是数据库领域的一门重要课程,主要涵盖了数据库的基础理论、设计方法、实施技巧以及管理策略。第六版的教材深入浅出地介绍了MySQL这一流行的开源关系型数据库管理系统,为学习者提供了...

    MySQL 5.1 版数据库

    MySQL 5.1是MySQL数据库管理系统的一个重要版本,它在2005年发布,以其稳定性和高效性受到广泛欢迎。MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典的MySQL AB公司开发,后来被Sun Microsystems收购,最终...

    MySql数据库技术精粹

    MySQL数据库技术精粹是针对MySQL数据库系统的一部深入解析之作,旨在帮助读者全面掌握MySQL的各种技术要点。MySQL作为世界上最受欢迎的开源关系型数据库之一,它的高效、稳定和易用性使其在众多领域得到了广泛应用,...

Global site tag (gtag.js) - Google Analytics