【MySQL学生手册】表维护操作类型

本文地址:https://www.askmaclean.com/archives/mysql-maintenance-type.html

 

第10章 表的维护

 

章节概述

本章介绍如何在MySQL中进行表的维护管理。你会了解:

  • 分辨表维护操作类型
  • 执行表维护SQL语句
  • 使用客户端及工具程序来进行表维护
  • 修理InnoDB表
  • 启用对MyISAM表的自动修复

 

10.1 表维护操作类型

一些表维护操作对于判定并修正数据库中的问题(例如,当一张表由于服务器奔溃而导致损坏后)或帮助MySQL优化表查询时非常有用。MySQL(根据存储引擎)可允许你执行几种类型的维护操作:

存储引擎名 MyISAM InnoDB
CHECK TABLE 完整检查更新索引统计信息 完成检查
REPAIR TABLE 修理讹误表 N/A
ANALYZE TABLE 更新索引统计信息 更新索引统计信息
OPTIMIZE TABLE 回收被浪费的空间表碎片整理索引页排序

更新索引统计信息

表重建(MySQL 5.7.4以后部分使用了online DDL的机制避免了表拷贝)

[Read more…]

【MySQL学生手册】MySQL表分区类型

本文地址:https://www.askmaclean.com/archives/mysql-partition-type.html

 

9.2 分区类型

  • RANGE分区:基于列值所处在的给定范围来对行进行分区。
  • LIST分区:和RANGE分区类似,不过区别是基于一组离散值集合中的值匹配来进行分区。
  • HASH分区:分区的选择基于要插入行的列值进行用户定义功能函数计算后的返回值。其功能函数可以包括任意MySQL有效表达式并返回一个非负的整数值。
  • KEY分区:和Hash分区类似,不过区别是使用MySQL自有的哈希功能来对一列或多列进行哈希计算,其中的列值也可以包含除整数值之外的值,而MySQL并不关心列值的具体数据类型,在哈希计算后,都会返回一个整数值。

 

通常使用数据库分区时会按日期时间来都对数据进行分割。一些数据库系统支持显式时间日期分区语法,不过MySQL不支持。不过在MySQL中,想要基于DATE,TIME,或DATETIME列来建立分区,或基于使用这些列进行计算的表达式来进行分区都并不困难。

 

当通过KEY或LINEAR KEY建立分区时,你可以在不对DATE,TIME或DATETIME列进行任何值修改的情况下,直接使用它们来进行分区。例如,以下表分区语句在MySQL中是可行的:

CREATE TABLE members (
firstname VARCHAR(25) NOT NULL,
lastname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
joined DATE NOT NULL
)
PARTITION BY KEY(joined)
PARTITIONS 6;

[Read more…]

【MySQL学生手册】分区(Partition)

本文地址:https://www.askmaclean.com/archives/mysql-partition.html

 

第9章 分区(Partition)

 

章节概述

本章介绍在MySQL中分区的管理。你会了解:

  • 理解分区概念
  • 使用SHOW VARIABLES来确定服务端的分区支持
  • 如何建立一张分区表
  • 描述分区类型

 

9.1 分区概述

SQL标准中并不提供很多关于数据物理存储方面的指导。而SQL语句本身趋向于独立于数据结构或这些模式(schema/database),表,行或列下对应的介质进行运行。但是,大多数高级的数据库管理系统都会有一些方法来判断具体被用于存储的文件系统或硬件下的数据片的物理位置。在MySQL中,InnoDB存储引擎还支持表空间概念。在MySQL服务端,介绍分区之前,你可以配置不同的空物理目录来存储不同的数据库。

Tips:分区是从MySQL 5.1.14-Beta版本开始被引入的功能。

 

分区在此基础上更近一步,允许你在将单个表的各个部分分布在整个文件系统中(只要所设分区文件的大小遵守系统的规则)。实时上,一张表的不同部分可以如各个分割的表存储在不同位置。数据通过用户选择的规则进行的分割(我们称为分区功能),如按量值进行分区,或简单匹配一个值列范围进行分区,或使用内部哈希函数或一个线性函数进行分区等。如何分区由用户按分区类别来确定,其所用的功能匹配可以接受用户提供的表达式值作为参数,表达式可以是一个整型列值,或在对一个或多个列进行处理后来得出的一个整数来作为返回。表达式的值被传给分区功能函数,此函数会返回一个整数值代表了对应数据行应该被存放在哪个分区的分区号。此功能函数必须是非静态值和非随机值。它不能包含任何查询,但可以“虚拟的“使用在MySQL中有效的任意表达式(只要表达式返回的正整数小于最大可能的正整数值MAXVALUE即可)。

 

我们在这里所介绍的分区在概念上指水平分区(horizontal partitioning)– 即,表中的不同行可以在不同的物理分区中。MySQL不支持垂直分区(vertical partitioning),即表中的不同列被分派到不同的物理分区中。到现在为止,MySQL还未有任何计划来引入垂直分区功能。

 

9.1.1 查看分区功能启用状态

在MySQL 5.6版本之前,你可以通过使用以下语句来查看MySQL的分区功能是否已经启用:

mysql> SHOW VARIABLES LIKE '%partition%';

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| have_partitioning | YES   |
+-------------------+-------+
1 row in set (0.00 sec)

不过从MySQL 5.6开始,have_partitioning环境变量已经被移除,因此你需要使用show plugins来查看partition的启用情况。

如果对应状态显示未被启用的话,则说明当前的MySQL服务端不支持分区功能。

[Read more…]

【MySQL学生手册】选择合适的存储引擎

本文地址:https://www.askmaclean.com/archives/mysql-storage-engines-choice.html

 

8.4 选择合适的存储引擎

当建立一张表,你需要首先问一下自己这张表被用于何种类型的查询。然后选择一种存储引擎来适合查询所涉及到的锁级别。MyISAM表级锁对于在进行繁重的查询数据抽取而极少有更新的情况下运行效果好。而如果运行中有大量更新操作的话,InnoDB是更好的选择。InnoDB使用行级锁和多版本控制对于大量数据读取和更新提供了并行性。一个查询可以对某些行进行更新,而同时其它查询则可以对同表中的其它行进行读取和更新。

 

如果你使用MyISAM表,那么使用何种列结构来对处理速度或磁盘使用效率的考量就会变得重要。不同的MyISAM存储格式具有不同的性能特定。其影响你最终是否选择定长或变长列进行字符串数据存储:

  • 为了最佳的速度而使用定长列(CHAR, BINARY)。使用固定长度的列使得MySQL得以以固定长度的行建立表。定长行的优势在于,所有行都按位置存储在表中,而这些行的寻找非常迅速。不利在于定长值总是占据了相同长度空间,即便在值并没有用足此列的真个长度下,因此定长列的存储需要花更多空间。
  • 考虑最佳空间使用而使用变长列(VARCHAR, VARBINARY, TEXT, BLOB)。例如,在VARCHAR列中的值仅会占用必要的存储空间,而平均计算的话,比CHAR列储存空间占用小。不利在于变长列会导致变长行。这些值的存储将不会在表的固定位置上,因此它们不能如定长行一般获取如此迅速。此外变长行的内容甚至可能并不是存放在一个位置上,这也导致了一些处理开销。

 

使用MyISAM表的另一种方式是用来作为压缩的只读表。

对于InnoDB表,使用CHAR列平均上来看会比表VARCHAR使用更多空间。但是InnoDB中两者不会如在MyISAM中具有查询速度差异。这是由于InnoDB引擎在实现上对CHAR和VARCHAR使用了相似方式。事实上,CHAR值的获取可能还慢一些,因为平均上来说,它们需要从磁盘上读取更多信息。

[Read more…]

Mysql数据库管理表的维护

本文地址:https://www.askmaclean.com/archives/mysql-table-maintain.html

 

 

一、目标

 

完成本课程后,你应该能够:

  • 认识不同类型的表维护操作
  • 执行维护表的SQL语句
  • 使用客户端和实用程序维护表
  • 根据具体的存储引擎维护表

 

二、实施表的维护

 

  • 表的维护操作对识别和解决数据库问题非常有用,例如:
  • 因服务器崩溃而损坏的表
  • 表上查询处理缓慢
  • 许多工具可以执行表的维护
  • MySQL Workbench(MySQL工作台)
  • MySQL Enterprise Monitor(MySQL企业版监视器)
  • SQL(DML)Maintenance statements(SQL <DML>维护语句)
  • 工具:
  • mysqlcheck
  • Myisamchk
  • Server auto-recovery(服务器自动恢复)

 

三、使用SQL进行表的维护操作

 

  • 有多条SQL语句可以执行表的维护:
  • ANALYZE TABLE : 更新索引的统计信息
  • CHECK TABLE : 检查表的完整性
  • CHECKSUM TABLE : 报告表数据的一致性检测结果
  • REPAIR TABLE : 修复表
  • OPTIMIZE TABLE : 优化表

 

  • 每条语句需要一个或多个表名和可选关键字。

 

  • 一条维护语句和输出的样例:

MYSQL_TABLE_MAIN1

 

备注:

在执行请求的操作之后,服务器返回操作的结果信息到客户端。

结果信息以四列格式显示:

  • Table : 标示执行操作的表
  • Op : 操作的名字(check,repair,analyze,或optimize)
  • Msg_type : 提供一个成功或失败的指示器
  • Msg_text : 提供额外的信息

 

如果想获取关于MySQL表维护的更多信息,可以参照文档:

MySQL Reference Manual

http://dev.mysql.com/doc/mysql/en/table-maintenance-sql.html

[Read more…]

【MySQL学生手册】其它存储引擎

本文地址:https://www.askmaclean.com/archives/mysql-other-storage-engines.html

 

8.3 其它存储引擎

 

 

MySQL服务端还支持除之前所介绍之外的其它几种数据引擎(当然有些存储引擎随着各种原因,或渐渐淡出MySQL主流舞台,或被弃用,而第三方提供的存储引擎更是层出不穷,因此,这里我们就不一一列举了,只介绍官方提到的一些引擎,权当个小知识即可),基于不同版本的MySQL,其默认是否进行了编译安装启用都会有所不同,这里不会做太深入的启用介绍,因此,如果大家感兴趣,可以查看MySQL的官方手册来了解。

 

 

 

8.3.1 EXAMPLE存储引擎

 

你可以将EXAMPLE引擎作为一个最佳的”MySQL存储引擎开发”样例来进行源码学习,事实上此引擎的目的也是如此,它并非用于生产环境,其不支持任何的数据插入操作,它对于有志于开发那些自有存储引擎的开发者起到了一个示范作用。

 

 

8.3.2 MERGE存储引擎

 

 

MERGE存储引擎,这里又个称为MRG_MYISAM存储引擎。它可以将多张完全相同的MyISAM存储引擎表“合而为一”(建立一张MERGE表,其定义包含有多张表结构,列顺序,索引相同的MyISAM表)。

虽然可以合并的限制较为严格,不过如果可用的话也会有以下优点:

  • 更简单的表管理
  • 如果表其底层对应的MyISAM表分布如不同的磁盘,其只读的情况可获得更佳的查询速度。
  • 不受操作系统文件大小限制(每个MyISAM表文件都有其大小限制)。

优点不止于此,不过也有缺点:如MERGE表不可建立FULLTEXT索引;其索引读会慢一些等。

 

 

[Read more…]

【MySQL学生手册】常用存储引擎 – MEMORY

本文地址:https://www.askmaclean.com/archives/mysql-storage-engines-memory.html

 

MEMORY配置项:

MEMORY存储引擎作为一个有效且有用的引擎,应该在大多应用设计中考虑其的使用,以提高性能并满足特定的业务需要。以下是是对MEMORY存储引擎最佳实践中的一些建议:

 

 

  • 最小化一张MEMORY表可增长的大小 – 许多应用会使用MEMORY存储引擎来动态倒入,由于没有得到正确的引导而导致表过大,从而产生了较差的性能。这里你可以使用以下解决方案来满足应用需求:
  •    max_heap_table_size – 这个变量设置了MEMORY表被运行增长到的最大大小。此值被用于计算MEMORY表MAX_ROWS值。变量设置对于已存在的MEMORY表没有效果,除非你使用CREATE TABLE进行表重建,或使用ALTER TABLE或TRUNCATE TABLE来进行表修改。
  •    MAX_ROWS – 对于单独MEMORY表,表的最大行数可以在CREATE TABLE(或ALTER TABLE)语句中使用MAX_ROWS语法进行设置。

 

[Read more…]

MYSQL数据库培训

Oracle大学为世界上最流行的开源数据库MySQL提供全面的课程和认证。扩展你的MySQL数据库知识通过行业专家的高品质的MySQL培训课程。一张MySQL证书展示你的专业知识,让你的职业生涯更广阔。

 

 

MySQL 培训和认证

 

Oracle大学对MySQL的培训可以帮助你提高性能,整合业务并管理业务流程和数据。 MySQL课程包括专为数据库管理员和开发人员设计的课程,帮助你掌握MySQL数据库的特性和功能,以及为你的行业认可的证书作好准备。

 

特色课程

 

  • MySQL 入门 (4)覆盖了MySQL数据库的所有基础知识,为之后的学习打下坚实的基础。使用MySQL作为教学工具,学习SQL的的基础知识和关系数据库。此外,它为你的MySQL工程师认证考试作好准备。
  • 适合数据库管理员的MySQL学习(5)是帮助数据库管理员理解重要项目,如安装和升级,用户管理,灾难恢复和优化的核心课程。你也将有机会接触到不同的存储引擎,并学习在哪里可以找到其他MySQL资源。本课程也能为你的MySQL数据库管理员认证考试作准备。
  • 适合开发人员的MySQL学习 (5 )是帮助开发人员策划使用MySQL应用的设计和实施的基础课程。本课程涵盖数据设计,查询和编程必要的SQL语句。它能为你的MySQL开发人员认证考试作准备。
  • MySQL 性能优化 (4 )是专为数据库管理员和其他想要监控和调优MySQL的人员设计的课程。学习评估结构,使用工具,基于性能配置数据库,调优应用和SQL代码,调优服务器,检查存储引擎,评估应用架构,和其他的调优概念。
  • MySQL 高可用性 (3 ) 是专为经验丰富的数据库管理员和系统架构师设计的,帮助他们对不同的高可用性选项分析并形成基础理解,包括MySQL中的集群和复制解决方案。
  • MySQL 集群 (3 )介绍了如何正确配置和管理群集节点,以确保高可用性,如何安装不同的节点,以及对集群的内部知识的深入理解。此外,它能为你的MySQL Cluster数据库管理员认证考试作准备。

 

 

在oracle.com/education/mysql查看完整的MySQL数据库的培训和认证文档。

 

 

关于Oracle大学

 

Oracle大学是首屈一指的Oracle技术和产品的培训的供应商。作为世界上最大的企业培训机构之一,我们提供成几千个线下线上,虚拟和CD-ROM的课程。当你选择了Oracle大学,会有以下优势:

 

  • 非常准确且相关资料的技术培训
  • 讲师的专业知识和经验
  • 100% 学生满意度项目
  • 验证和奖励培训成功的Oracle认证项目
  • 最大和最新的甲骨文课程
  • 为匹配IT工作角色而开发的课程
  • 为产品的重点领域定制的学习路径
  • 在任何时间和地点灵活的学习方式
  • 全球范围最大的培训计划
  • 最大限度的范围和地点的合作伙伴关系

【MySQL学生手册】常用存储引擎 – InnoDB

本文地址:https://www.askmaclean.com/archives/mysql-storage-engines-innodb.html

 

 

8.2.2 InnoDB存储引擎

使用InnoDB存储引擎管理的表具有以下等特点:

  • 每个InnoDB表在数据库底层磁盘目录中以一个.frm格式文件代表其存在,而其数据和索引的存储会被放在InnoDB表空间(tablespace
    •   表空间是一个单独的逻辑存储区,其由一个或多个文件或磁盘分区组成。
    •   默认情况下,MySQL仅使用单个InnoDB表空间,其被所有InnoDB表所共享。
    •   表的大小可以超过文件系统所允许最大文件大小。
    •   可以配置InnoDB以建立每个表时使用其自己的表空间
  • 支持事务,可使用COMMIT和ROLLBACK语句
  • 完全遵循ACID原则
  • 在MySQL服务端或运行的主机崩溃后提供自动恢复
  • 提供多版本(Multi-versioning)存储和行级锁(row-level)支持
  • 支持外键和参考一致性,包括级联删除和级联更新。

InnoDB表空间和日志:

InnoDB操作使用两种基于磁盘的资源:一个存储表内容的表空间和一堆记录事务活动的日志文件。

 

每个InnoDB表在数据库磁盘目录中拥有一个.frm格式文件。这和由其它MySQL存储引擎管理的表相同,如MyISAM。然而,InnoDB在管理表内容(数据行和索引)在磁盘上的存储和MyISAM存储引擎不同。默认是,InnoDB使用一个共享的“表空间”,其是由一个或多个文件组成的单个逻辑存储区。所有InnoDB表被存储在此表空间中,但并不是如MyISAM表的针对特定表的对应数据文件和索引文件形式。表空间中还包含有一个回滚段(rollback segment)。当事务修改了行数据,undo日志信息会被存储于此回滚段中,这些信息被用于回滚失败的事务。

[Read more…]

【MySQL学生手册】常用存储引擎 – MyISAM

本文地址:https://www.askmaclean.com/archives/mysql-storage-engines-myisam.html

 

8.2 常用存储引擎

MySQL可以使用多种存储引擎来进行工作,因此针对特定需求,用户可以有许多选择。以下为MySQL的一些常用存储引擎(包括了简单的特性比较):

 

MyISAM InnoDB MEMORY
Ÿ   速度快

Ÿ   数据存储在.MYD表文件中

Ÿ   表级锁

Ÿ   支持事务(COMMIT/ROLLBACK)

Ÿ   支持外键

Ÿ   行级锁

Ÿ   数据仅在内存中(如果服务端关闭则数据丢失)

 

8.2.1 MyISAM存储引擎

 

MyISAM存储作为曾经MySQL的默认存储引擎。它所管理的表具有以下特性:

  • 其每个表使用三个文件:
    • 一个格式文件 — 存储表结构定义(frm)
    • 一个数据文件 — 存储表行内容(MYD)
    • 一个索引文件 — 存储表上索引(MYI)
  • 和其他存储引擎一样提供AUTO_INCREMENT列处理
  • 可被转换为可快速访问,压缩的,只读表以节约空间
  • 使用表级锁来管理对MyISAM表访问的查询争用
  • 支持全文索引来查询空间数据类型数据
  • 支持GIS地理空间扩展
  • 表存储格式是便携的,意思是表文件可以直接拷贝至其它主机并被其主机中的服务端所用。
  • 可定义表必须能够存放的最少行数。
  • 当将数据倒入一张空表时,你可以禁用对非唯一索引的更新并在倒入完成后再启用这些索引。
和老式ISAM表相同,MyISAM表使用索引顺序访问方式在进行索引建立。不过MyISAM比ISAM提供更好的性能,因此在MySQL 5.0之后ISAM不在可用,而倾向于使用MyISAM。

[Read more…]

沪ICP备14014813号

沪公网安备 31010802001379号