目前,优化海量数据的方法主要有两种:
1.将一个大表分割成多个小表的方法(物理上)
答:竖桌->一竖切成几块。
二:横向表(一般重点)->横切,指一个表有100个数据横切10个表,一个表存储10个项(字段一致)。
2.2:SQL语句的优化(可以通过添加索引来调整,但是数据的增加会导致索引维护成本的增加)。
水平分区技术将一个表拆分成多个表。常见的方式是按照某种哈希算法拆分表中的记录,简单的拆分方法如such。
方式。同样,只有在前端应用程序中的SQL被修改的情况下,才能使用这种分区方法。对于一个SQL,它可能会修改两个。
表,那么你必须成功地写两条SQL语句才能完成一个逻辑事务,这就使得程序的判断逻辑越来越复杂,也导致了程序的维护成本。
高,也失去了使用数据库的优势。
*因此,分区技术可以有效避免上述缺点,成为解决海量数据存储的有力方法。
分区技术:
-->有效解决:物理拆分多张表,逻辑操作一张表显示无变化。
->>MySQL分区技术介绍(*主要使用范围和列表分区*);
-partition逻辑上是一个表,硬件/物理上是多个表,也就是拆分表索引和数据-
MySQL的分区技术不同于以前的分表技术。它类似于水平分表技术,但是它在逻辑层水平分表。
它仍然是应用程序的一个表,
MySQL5.1版本5.1之后有4种分区类型:
一:范围分区(使用最多):基于属于给定连续区间的列值(字段),将多行分配给分区->基于女性字段作为参照点的分区。
-将一个表拆分成:索引文件,而数据文件是分块存储的。
二:列表分区:类似于按范围分区,不同的是列表分区是基于列值匹配一组离散值中的一个值(当列中的值为固定值时进行分区,枚举类型值适合列表分区->例如性别:男或女)。
哈希分区:根据用户定义的表达式的返回值选择的分区。该表达式通过使用要插入到表中的这些行的列值来计算。这个函数可以包含任何在MySQL中有效的表达式,并产生负整数值。
->将每次插入的数据随机均匀分布到多个分区,最后多个分区的数据会均匀分布,但是每个分区的值会不一样,因为是随机分布的(一般用于测试MySQL分区)。
四:key partition:类似于通过hash进行分区,不同的是KEY partition只支持计算一列或多列,MySQL服务器提供自己的hash函数。
测试一下(hash类型用于测试):->myisam在添加、删除和更改查询方面速度很快
Create table 2(ID int)Engine = Myisam
Partition by hash(ID)
Partition 5;->插入数据时,会随机分配并插入到每个分区
中,创建一个存储
\d //->在结束符号修改之前;将数字改为//
create procedure P5()
begin
set @ I = 1;
而@i表p3已经插入了9999条数据。
innodb的数据结构:
分为:共享表空和独占表空。
一:innodb表结构共享表空不能做成分区表:
所有文件的数据和索引都在ibddata1中(比如构建两个表,会生成frm文件,但是两个表的所有数据和索引都在这个文件中共享,所以不能对表进行正确的分区,初始值为10M)。
原因:数据和索引都在一个文件中。ibddata1文件。
二:innodb表结构做分区表,必须& 独占表空;
原因:数据和索引都是独立的文件。
打开独占空房间:(*必须打开配置文件中的文件做独占表空房间做分区表*)
innodb _ data _ home _ dir = C:\ MySQL \ data \
innodb _ data _ file _ path = IB data1:10M:auto extend
innodb _ log _ group _ home _ dir = C:\ MySQL \ data \ .
test:
create table T4(id int)engine = innodb
PARTITION by range(id)(
PARTITION P0值小于(10000),
partition p1值小于(20000),
PARTITION p2值小于max value);
创建innodb类型的数据表后,你会发现如果构建一个X表,会有一个x.frm x.ibd文件,它不会和其他表放在一起对表进行分区。
*总结:只有将innodb设置为独立表空时,才能创建innodb表引擎的表分区。
相关命令:
/s;查看详细信息版本、编码等。。。
显示引擎;检查默认的表引擎
显示插件;看看MySQL的所有插件,就知道是否支持partition
show index from from tabname;检查索引
显示过程状态;查看简历的存储