存储引擎

高性能MySQL--总览篇

有些话、适合烂在心里 提交于 2019-12-13 01:00:42
文章为转载: MySQL逻辑架构及性能优化原理   说起MySQL的查询优化,相信所有人都了解一些最简单的技巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型….. 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要。 MySQL逻辑架构   如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。   MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理、授权认证、安全等功能均在这一层处理。   MySQL大多数核心服务均在中间这一层,包括查询解析、分析、优化、缓存、内置函数(比如:时间、数学、加密等函数)。所有的跨存储引擎的功能也在这一层实现:存储过程、触发器、视图等。   最下层为存储引擎,其负责MySQL中的数据存储和提取。和Linux下的文件系统类似,每种存储引擎都有其优势和劣势。中间的服务层通过API与存储引擎通信,这些API接口屏蔽了不同存储引擎间的差异。       每一个客户端发起一个新的请求都由服务器端的连接/线程处理工具负责接收客户端的请求并开辟一个新的内存空间,在服务器端的内存中生成一个新的线程

MySQL索引与事务、存储引擎MyISAM和InnoDB (理论+实践篇)

半腔热情 提交于 2019-12-12 00:19:46
索引的概念 数据库中的索引与书籍中的目录类似 在一本书中,无须阅读整本书,利用目录就可以快速查找所需信息 书中的目录是一个词语列表,其中注明了包含各个词的页码 数据库索引 在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据 数据库中的索引|是某个表中一-列或者若干列值的集合,以及物理标识这些值的数据页的逻辑指针清单 索引的的作用 设置了合适的索引之后,数据库利用各种快速的定位技术,能够大大加快查询速率 特别是当表很大时,或者查询涉及到多个表时,使用索引可使查询加快成3 F倍 可以降低数据库的I0成本,并且索引还可以降低数据库的排序成本 通过创建唯一性索引保证数据表数据的唯- -性可以加快表与表之间的连接 在使用分组和排序时,可大大减少分组和排序时间 索引的分类 普通索引 这是最基本的索引类型,而且它没有唯一性之类的限制 唯一性索引 这种索引和前面的“普通索引”基本相同,但有一个区别:索引列表的所有值都只能出现一次,即必须唯一 主键 主键是一种唯一索引,但它必须指定为“PRIMARY KEY" 全文索引 MySQL从3.23.23版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT, 全文索引可以在VARCHAR或者TEXT类型的列上创建 单列索引与多列索引 索引可以是单列上创建的索引,也可以是在多列上创建的索引

MySQL简介

回眸只為那壹抹淺笑 提交于 2019-12-11 19:29:35
一、MySQL简介 1、数据库管理软件分类 主要分为关系型和非关系型。 可以简单的理解为,关系型数据库需要有表结构,非关系型数据库是key-value存储的,没有表结构。 关系型:如sqllite,db2,oracle,access,sql server, MySQL ,注意:sql语句通用。 非关系型:mongodb,redis,memcache 2、MySQL MySQL是一个关系型 数据库管理系统 ,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (关系数据库管理系统) 应用软件。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是 开放源码 这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。 MySQL为我们提供开源的安装在各个操作系统上的安装包,包括mac,linux,windows。 二、存储引擎(也称作表类型) MySQL中的数据用各种不同的技术存储在文件(或者内存)中。每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能

关系型数据库——MySQL

感情迁移 提交于 2019-12-11 01:12:23
【MySQL架构图】 MySQL简要架构图如下图所示,引擎层以插件方式集成了不同的存储引擎,它们共用Server层对外提供服务。    连接器:用于连接管理,进行身份认证及权限相关的管理。(登录MySQL) 查询缓存区:执行查询语句时,先从缓存区查询。(该功能V8.0之后移除) 分析器:未命中缓存时,对SQL进行词法分析、语法分析。 优化器:按照MySQL认为的最优方案,生成执行计划。 执行器:执行SQL,并从存储引擎返回数据。 存储引擎:存储数据,提供读写接口 【MySQL存储引擎】 V5.5之前MySQL的默认存储引擎为MyISAM(ISAM:Indexed Sequential Access Method,即有索引的顺序访问方法。MyISAM是基于传统的ISAM优化而来) V5.5之后,MySQL的默认存储引擎便更改为InnoDB,主要是为支持数据库事务安全而设计。 # MyISAM vs InnoDB 锁:MyISAM支持表级锁;InnoDB支持行级锁(默认)。因此并发操作时,InnoDB的效率要更高。 性能:MyISAM执行大量select和insert操作时,效率更高;InnoDB执行大量update和insert操作时,效率更高。 外键:MyISAM不支持;InnoDB支持外键。 事务:MyISAM不支持事务操作;InnoDB支持数据库事务。 崩溃后安全恢复

二叉查找树、平衡二叉树(AVLTree)、平衡多路查找树(B-Tree),B+树

一世执手 提交于 2019-12-10 12:15:30
B+树索引是B+树在 数据库 中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。 B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。 在讲B+树之前必须先了解 二叉查找树 、 平衡二叉树(AVLTree) 和 平衡多路查找树(B-Tree) ,B+树即由这些树逐步优化而来。 二叉查找树 二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大于根的键值。 如下图所示就是一棵二叉查找树, 对该二叉树的节点进行查找发现深度为1的节点的查找次数为1,深度为2的查找次数为2, 深度为n的节点的查找次数为n, 因此其平均查找次数为 (1+2+2+3+3+3) / 6 = 2.3次 二叉查找树可以任意地构造,同样是2,3,5,6,7,8这六个数字,也可以按照下图的方式来构造: 但是这棵二叉树的查询效率就低了。因此 若想二叉树的查询效率尽可能高,需要这棵二叉树是平衡的,从而引出 新的定义——平衡二叉树,或称AVL树 。 平衡二叉树(AVL Tree)----(基于【二插树】改善,查询效率提高) 平衡二叉树(AVL树)在符合二叉查找树的条件下, 还满足任何节点的两个子树的高度最大差为1 。 下面的两张图片: 左边是AVL树,它的任何节点的两个子树的高度差<=1; 右边的不是AVL树,其根节点的左子树高度为3,而右子树高度为1;

储存引擎,导入导出

荒凉一梦 提交于 2019-12-10 10:24:37
第 三 节 储存引擎,导入导出 l 储存引擎的介绍和使用 ********************************************************** mysql 存储引擎 1.1 存储引擎介绍 1.2 查看数据库服务支持的存储引擎有那些? 1.3 查看已有的表使用的存储引擎 1.4 修改数据库服务默认使用的存储引擎 1.5 修改表使用的存储引擎,或建表时指定表使用的存储引擎 1.6 常用存储引擎的特点 1.7 建表时如何决定表使用那种存储引擎 1.8 工作中怎么决定数据库服务器使用那种存储引擎 MySQL 存储引擎 • 作为可插拔式的组件提供 – MySQL 服务软件自带的功能程序 , 处理表的处理器 –不同的存储引擎有不同的功能和数据存储方式 •默认的存储引擎 – MySQL 5.0/5.1--->MyISAM – MySQL 5.5/5.6--->InnoDB •列出可用的存储引擎类型 – SHOW ENGINES; 或 SHOW ENGINES\ G ********************************************************************** 修改存储引存 1 )修改表使用的存储引擎,或建表时指定表使用的存储引擎 alter table 表 engine= 存储引擎名; create table 表

Mysql数据库之 InnoDB存储引擎

女生的网名这么多〃 提交于 2019-12-10 06:52:31
写在前面,对于mysql数据库存储引擎这块的知识比较杂乱无章,特别是对于存储引擎下面涉及到的理论知识,楼主在第一遍看完《mysql技术内幕 InnoDB存储引擎》后,脑海里只留下一点关于存储引擎的基本概念,就像是看完一场电影一样,可能是缺乏实践操作,也有可能是对于其中的理解不够透彻。所以决定再次阅读该书,并记录自己的笔记,以增强理解记忆。 InnoDB体系架构 后台线程 InnoDB存储引擎有多个内存块,可以理解这些内存块组成了一个大的内存池,负责一系列工作。 通过InnoDb存储引擎体系架构可以看出其是一个多线程的模型,后台具有多个不同的线程,负责不同的任务。这里面主要有Master Thread、IO Thread、Purge Thread等线程。具体功能分别如下: Master Thread:是一个核心线程,主要作用是负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性。 IO Thread:主要处理IO请求的回调处理。 Purge Thread:回收不再使用的undolog。 内存 缓冲池 InnoDb存储引擎是基于磁盘存储的,其中的记录是按照页的方式进行管理的。在数据库系统中,CPU的处理速度比磁盘的要快的多,为了不因为磁盘的读写速度拖垮CPU,在CPU和磁盘之间存在一个内存区域称为缓冲区。(具体有关缓存的知识可以看计算机相关专业知识,这里不再赘述)

存储引擎 存储过程 存储函数

半腔热情 提交于 2019-12-10 04:16:46
一、存储引擎就是指表的类型。数据库引擎决定了表在计算机中的存储方式。 1、查看mysql数据库支持的存储引擎 mysql> show engines \G \G 数据成列显示,这时不用写分号了 或者 mysql> show variables like 'have%'; 2、查询默认的存储引擎 mysql> show variables like 'storage_engine'; 二、InnoDB存储引擎 优点:支持事物处理,支持外键,支持崩溃修复能力和并发控制,实现事务的提交和回滚。 缺点:读写效率稍差,占用的空间相对比较大 三、MyISAM存储引擎 优点:占用空间小,处理速度快 缺点:不支持事务的完整性和并发性。 四、MEMORY存储引擎 表的所有数据存储在内存上,内存出现异常会影响数据完整性。 优点:在内存中,处理速度非常快 缺点:安全性不高,数据易丢失,生命周期短,一般都是一次性。 开始存储过程之前还有一个工作要做,就是修改MySql的结束符,系统默认的是‘;’不过要建立存储过程,再用这个默认的分号就不方便了,把结束符改为‘//’,操作起来很简单,命令:DELIMITER // ,搞定; 好了,建立第一个存储过程: CREATE PROCEDURE p1 () SELECT * FROM t; // SQL语句存储过程的第一部分是 “CREATE PROCEDURE”

MYSQL面试必读

孤人 提交于 2019-12-07 16:03:36
Mysql 的存储引擎,myisam和innodb的区别。 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用。表锁,不会出现死锁,适合小数据,小并发。 2.innodb是支持事务的存储引擎,合于插入和更新操作比较多的应用,设计合理的话是行锁(最大区别就在锁的级别上),适合大数据,大并发。 数据表类型有哪些 答:MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。 MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。 InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。 MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化? a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。 b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。 c. mysql库主从读写分离。 d. 找规律分表,减少单表中的数据量提高查询速度。 e。添加缓存机制,比如memcached,apc等。 f. 不经常改动的页面,生成静态页面。 g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE. 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?

MySQL优化-2-数据库对象

拈花ヽ惹草 提交于 2019-12-06 22:29:58
优化表的数据类型 - PROCEDURE ANALYSE() 表需要使用何种数据类型,是需要根据应用来判断的。虽然应用设计的时候需要考虑字段的长度留有一定的冗余,但是不推荐让很多字段都留有大量的冗余,这样即浪费存储也浪费内存。我们可以使用PROCEDURE ANALYSE()对当前已有应用的表类型的判断,该函数可以对数据表中的列的数据类型提出优化建议,可以根据应用的实际情况酌情考虑是否实施优化。 语法: SELECT * FROM tbl_name PROCEDURE ANALYSE(); SELECT * FROM tbl_name PROCEDURE ANALYSE(16,256); 输出的每一列信息都会对数据表中的列的数据类型提出优化建议。第二个例子告诉PROCEDURE ANALYSE()不要为那些包含的值多于16 个或者256 字节的ENUM 类型提出建议。如果没有这样的限制,输出信息可能很长;ENUM 定义通常很难阅读。 在对字段类型进行优化时,可以根据统计信息并结合应用的实际情况对其进行优化。 通过拆分提高表的访问效率: 这里我们所说的拆分,主要是针对Myisam 类型的表,拆分的方法可以分成两种情况: 1. 纵向拆分: 纵向拆分是只按照应用访问的频度,将表中经常访问的字段和不经常访问的字段拆分成两个表,经常访问的字段尽量是定长的