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 数据库表分区是一种优化大数据查询的技术,尤其适用于存储海量数据的应用场景。通过将大表分成更小、更易管理的部分,分区可以提高查询性能,减少数据处理的时间,并且简化数据管理和备份过程。 1. **分区...
Oracle和MySQL作为两款主流的数据库管理系统,在数据库分区方面各有特点和优势。本文将详细探讨Oracle与MySQL在数据库分区方面的不同之处,包括分区类型、创建和管理分区的语法,以及分区策略的应用场景。 Oracle和...
MySQL数据库的分表和分区是两种常见的优化策略,旨在应对大数据量带来的性能问题。当一个表包含数百万甚至上千万的记录时,查询和插入操作可能会变得非常缓慢,导致整个数据库系统的性能下降。分表和分区的目标是...
MySQL数据库巡检手册是MySQL数据库管理员(DBA)在进行数据库管理和维护工作中非常重要的参考资料。巡检手册包含了数据库性能、安全、运行状况等方面的检查项,以确保数据库能够正常稳定运行,及时发现并解决潜在问题...
### 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的存储过程和函数,了解它们在处理复杂业务逻辑和事务管理中的应用。此外,还会讲解触发器...
MySQL数据库是世界上最受欢迎的开源关系型数据库之一,广泛应用于各种规模的企业、网站和应用程序中。本书《MySQL数据库应用从入门到精通_第2版》旨在帮助读者从零基础开始,逐步掌握MySQL的使用技巧和高级功能,...
《MySQL数据库原理及应用》是一门深入探讨关系型数据库管理系统MySQL的课程,旨在教授学生如何设计、创建和管理数据库,以及如何在实际应用场景中高效利用MySQL。教案详细涵盖了该课程的所有章节,为教学提供了全面...
MySQL数据库是目前世界上最受欢迎的关系型数据库管理系统之一,尤其在互联网领域有着广泛的应用。《MySQL数据库原理及应用(第2版)(微课版)》是一本深入浅出介绍MySQL技术的教材,配合配套教案,旨在帮助学生和...
根据提供的文件信息,我们可以推断出这份文档主要包含MySQL数据库相关的考试练习题目。MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),因其性能稳定、易于使用和成本低廉等特点,在互联网应用开发中非常...
MySQL数据库是世界上最受欢迎的开源关系型数据库之一,广泛应用于各种规模的企业、网站和应用程序中。这份"MySQL数据库使用帮助文档"是开发者在处理与数据库相关的Web应用程序时的重要参考资料。它包含了大量的信息...
其中有每个命令的使用说明与注释。并增加了清理数据的方式。以及导入输入的注意事项
MySQL数据库系统设计实现与管理是数据库领域的一门重要课程,主要涵盖了数据库的基础理论、设计方法、实施技巧以及管理策略。第六版的教材深入浅出地介绍了MySQL这一流行的开源关系型数据库管理系统,为学习者提供了...
MySQL 5.1是MySQL数据库管理系统的一个重要版本,它在2005年发布,以其稳定性和高效性受到广泛欢迎。MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典的MySQL AB公司开发,后来被Sun Microsystems收购,最终...
MySQL数据库技术精粹是针对MySQL数据库系统的一部深入解析之作,旨在帮助读者全面掌握MySQL的各种技术要点。MySQL作为世界上最受欢迎的开源关系型数据库之一,它的高效、稳定和易用性使其在众多领域得到了广泛应用,...