Java Web数据库篇之MySQL概述

Java Web系列文章汇总贴: Java Web知识总结汇总


MySQL概述

MySQL简介

1、MySQL是当前最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(Relational DataBase Management System,关系数据库管理系统)软件。
2、关系数据库的优势在于,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
3、MySQL采用的SQL是访问数据库的最常用标准化语言。其体积小,速度快,并且开放源码,大大降低了使用成本。

MySQL系统特性包括:(来自百度百科)
1.使用 C和 C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性。
2.支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。
3.为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和 Tcl 等。
4.支持多线程,充分利用 CPU 资源。
5.优化的 SQL查询算法,有效地提高查询速度。
6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
7.提供多语言支持,常见的编码如中文的 GB 2312、BIG5,日文的 Shift_JIS等都可以用作数据表名和数据列名。
8.提供 TCP/IP、ODBC 和 JDBC等多种数据库连接途径。
9.提供用于管理、检查、优化数据库操作的管理工具。
10.支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
11.支持多种存储引擎。
12. MySQL 是开源的,所以你不需要支付额外的费用。
13. MySQL 使用标准的 SQL数据语言形式。
14. MySQL 对 PHP 有很好的支持,PHP是比较流行的 Web 开发语言。
15. MySQL是可以定制的,采用了 GPL协议,你可以修改源码来开发自己的 MySQL 系统。
16. 在线 DDL/更改功能,数据架构支持动态应用程序和开发人员灵活性(5.6新增)
17. 复制全局事务标识,可支持自我修复式集群(5.6新增)
18. 复制无崩溃从机,可提高可用性(5.6新增)
19. 复制多线程从机,可提高性能(5.6新增)
20. 3倍更快的性能(5.7 [3] 新增)
21. 新的优化器(5.7新增)
22. 原生JSON支持(5.7新增)
23. 多源复制(5.7新增)
24. GIS的空间扩展 (5.7新增)

MySQL架构

MySQL逻辑架构:
MySQL逻辑架构

MySQL工作流程:
 MySQL工作流程

更多:
MySQL逻辑架构及工作流程
MySQL必知必会知识点总结一二

MySQL查询优化

MySQL查询过程

 MySQL查询过程

MySQL整个查询执行过程,总的来说分为6个步骤:

  • 客户端向MySQL服务器发送一条查询请求
  • 服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段
  • 服务器进行SQL解析、预处理、再由优化器生成对应的执行计划
  • MySQL根据执行计划,调用存储引擎的API来执行查询
  • 将结果返回给客户端,同时缓存查询结果

MySQL查询性能优化

MySQL查询性能优化要从三个方面考虑,库表结构优化、索引优化和查询优化。

库表结构优化

1、选择优化的数据类型

  • 选择更小的合适的数据类型
  • 建索引的列,尽量不允许为NULL
  • TimeStamp存储优先于Datetime
  • 使用tinyint代替bit,boolean等
  • blob和text的使用场景

2、MySQL scheme的陷阱

  • 表的设计不能有太多的列,数千的列会影响性能
  • 关联操作设计的表不要太多,否则执行会比较慢(12以内)

索引优化:

1、索引类型

  • B-tree(B+tree)、哈希、空间数据索引、全文索引

2、索引策略

  • 独立列
  • 前缀索引-如果列很长,通常可以索引开始的部分字符,这样可以有效节约索引空间,从而- 提高索引效率
  • 多列索引-适应于多个查询条件时

3、建立索引的代价

  • 增加了数据库的存储空间,
  • 在插入和修改数据时要花费较多的时间(因为索引也要随之变动)

查询优化

1、查询方式优化(切分、分解,分而治之)

2、查询器优化,尽量避免不使用索引的情况出现

  • 放弃索引的场景:!=/<>、in、is NULL等符号的出现,索引列出现运算场景
  • 用Between代替in,Distinct代替Group by,Union all 代替 Union,如果可以的话
  • Like查询时,打头字母搜索,如XXX%,这种匹配方式可使用索引

3、使用Explain查看执行计划

4、打开慢查询,查看耗时多的慢查询语句

更多:
MySQL逻辑结构及性能优化原理
MySQL查询性能优化
MySQL查询语句优化



MyISAM与InnoDB引擎

概述

MyISAM更适合读取大于写入的业务,同时不支持事务。
InnoDB支持事务,行级锁支持,外键支持,效率上比MyISAM稍慢。

详细:
MySQL存储引擎中的MyISAM和InnoDB区别详解

文件存储

MyISAM物理文件结构

.frm文件:与表相关的元数据信息都存放在frm文件,包括表结构的定义信息等(与引擎无关的文件)。
.myd文件:myisam存储引擎专用,用于存储myisam表的数据
.myi文件:myisam存储引擎专用,用于存储myisam表的索引相关信息

InnoDB的物理文件结构

.frm与表相关的元数据信息都存放在frm文件,包括表结构的定义信息等(与引擎无关的文件)。

.ibd文件和.ibdata文件:这两种文件都是存放innodb数据的文件,之所以用两种文件来存放innodb的数据,是因为innodb的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是用独享表空间存放存储数据。

  • 独享表空间存储方式使用.ibd文件,并且每个表一个ibd文件
  • 共享表空间存储方式使用.ibdata文件,所有表共同使用一个ibdata文件
  • 决定使用哪种方式的参数在mysql的配置文件中 innodb_file_per_table=ON/OFF

InnoDB共享表空间与独立表空间

简介

Innodb存储引擎可将所有数据存放于ibdata*的共享表空间,也可将每张表存放于独立的.ibd文件的独立表空间(部分数据)。
共享表空间以及独立表空间都是针对数据的存储方式而言的。

  • 共享表空间: 某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下。 默认的文件名为:ibdata1 初始化为10M。
    可以在配置文件my.cnf中使用参数innodb_data_file_path设置一个或者多个文件组成表空间。
    共享表空间中会包含Undo信息,在事务未提交时数据即已经写入了表空间文件,当事务rollback时Undo信息不会被删除,但是此空间会被标记,后续会以覆盖的方式被重新使用。

  • 独立表空间: 每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述(结构)文件,还有一个.ibd文件。 其中这个文件包括了单独一个表的数据、索引、插入缓冲的内容,其余数据仍存放在共享表空间中,默认情况下独立表空间的存储位置也是在表的位置之中。
    可以在配置文件my.cnf中通过配置参数innodb_file_per_table = ON来开启独立表空间。

共享表空间VS独立表空间
共享表空间

优点:
可以将表空间分成多个文件存放到各个磁盘上(表空间文件大小不受表大小的限制,如一个表可以分布在不同的文件上)。数据和文件放在一起方便管理。

缺点:
所有的数据和索引存放到一个文件中,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日值系统这类应用最不适合用共享表空间。

独立表空间:

优点:
1. 每个表都有自已独立的表空间。
2. 每个表的数据和索引都会存在自已的表空间中。
3. 可以实现单表在不同的数据库中移动。
4. 空间可以回收(除drop table操作处,表空不能自已回收)

  • Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb; 回缩不用的空间。
  • 对于使innodb-plugin的Innodb使用turncate table也会使空间收缩。
  • 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。

缺点:
单表增加过大,如超过100个G。
相比较之下,使用独占表空间的效率以及性能会更高一点。

参考:
mysql 共享表空间、独立表空间

更多:
MySQL存储引擎MyISAM与InnoDB区别总结整理
MySQL技术内幕–innodb存储引擎图解
MySQL技术内幕 InnoDB存储引擎-阅读笔记
MySQL体系结构和存储引擎概述


MySQL三大特性

  • 插入缓冲 – 保证写性能
  • 两次写 – 高可靠性
  • 自适应哈希 – 提升读写性能

参考:
[MySQL] InnoDB三大特性之 - 插入缓冲
MySQL InnoDB特性:两次写(Double Write)
InnoDB Redo Flush及脏页刷新机制深入分析
mysql redo日志与刷脏
[MySQL] InnoDB三大特性之 - 两次写
[MySQL] InnoDB三大特性之 - 自适应哈希索引


MySQL知识点

MySQL常见问题

猜你喜欢

转载自blog.csdn.net/zangdaiyang1991/article/details/91376730