目录:

  • 数据库
  • 什么是数据库?
  • RDBMS 术语
  • MySQL数据库的介绍
  • MySQL数据库的特点:
  • 五大常用数据库引擎
  • Innodb与MyIASM引擎的区别与应用场景
  • 为什么MyIASM会比Innodb 的查询速度快
  • 应用场景

数据库


关系型数据库:

最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织

优点:

  • 易于维护:都是使用表结构,格式一致
  • 使用方便:SQL语言通用,可用于复杂查询
  • 复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询

缺点:

  • 读写性能比较差,尤其是海量数据的高效率读写
  • 固定的表结构,灵活度稍欠
  • 高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈


非关系型数据库:

严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。

优点:

  • 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型
  • 速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘
  • 高扩展性
  • 成本低:nosql数据库部署简单,基本都是开源软件

缺点:

  • 不提供sql支持,学习和使用成本较高
  • 无事务处理
  • 数据结构相对复杂,复杂查询方面稍欠

什么是数据库?

  1. 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的API(接口)用于创建,访问,管理,搜索和复制所保存的数据
  2. 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量
  3. 所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据
  4. RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
> 1)数据以表格的形式出现
> 2)每行为各种记录名称
> 3)每列为记录名称所对应的数据域
> 4)许多的行和列组成一张表单
> 5)若干的表单组成database

RDBMS 术语

在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:

  • 数据库: 数据库是一些关联表的集合。.
  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
  • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余:存储两倍数据,冗余可以使系统速度更快。
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

MySQL数据库的介绍

  • MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
  • 关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
  • MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

MySQL数据库的特点:

  • Mysql是开源的,所以不需要支付额外的费用

  • Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库

  • MySQL使用标准的SQL数据语言形式

  • MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB

  • Mysql是可以定制的,采用了GPL协议,可以修改源码来开发自己的Mysql系统

五大常用数据库引擎

一:MyISAM:

创建一个myisam存储引擎的表的时候会出现三个文件

1.tb_demo.frm,存储表定义; 2.tb_demo.MYD,存储数据; 3.tb_demo.MYI,存储索引。

因为MyISAM表有无法处理事务,所以它只适合在以下情况下使用

  1. 选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
  2. 插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。

二:InnoDB:

  1. 更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
  2. 事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
  3. 自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
  4. 外键约束。MySQL支持外键的存储引擎只有InnoDB。
  5. 支持自动增加列AUTO_INCREMENT属性。

Innodb与MyIASM引擎的区别与应用场景

1. Innodb与MyIASM引擎的区别

(1)事务处理:

MyIASM是非事务安全型的,而InnoDB是事务安全型的(支持事务处理等高级处理);

(2)锁机制不同:

MyIASM是表级锁,而InnoDB是行级锁;

(3)select ,update ,insert ,delete 操作:

  • MyIASM:如果执行大量的SELECT,MyISAM是更好的选择。
  • InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。
  • MySQL表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。
  • InnoDB行锁是通过给索引项加锁来实现的,即只有通过索引条件检索数据,InnoDB才使用行级锁,否则将使用表锁!

(4)查询表的行数不同:
MyIASM:select count() from table, MyISAM只要简单的读出保存好的行数,注意的是,当count()语句包含 where条件时,两种表的操作是一样的。
InnoDB : InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行。
MyISAM存储表的总行数;InnoDB不存储总行数;
MyISAM采用非聚集索引,B+树叶子存储指向数据文件的指针。InnoDB主键索引采用聚集索引,B+树叶子存储数据

(5)外键支持:

mysiam表不支持外键,而InnoDB支持。

为什么MyIASM会比Innodb 的查询速度快

INNODB在做SELECT的时候,要维护的东西比MyIASM引擎多很多;

  1. 数据块,INNODB要缓存,MyIASM只缓存索引块, 这中间还有换进换出的减少;
  2. innodb寻址要映射到块,再到行,MyIASM记录的直接是文件的OFFSET,定位比INNODB要快;
  3. INNODB还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护。
    MVCC ( Multi-Version Concurrency Control )多版本并发控制 。

应用场景

MyIASM适合:

  1. (1)做很多count 的计算;
  2. (2)插入不频繁,查询非常频繁;
  3. (3)没有事务

InnoDB适合:

  1. 可靠性要求比较高,或者要求事务;
  2. 表更新和查询都相当的频繁,并且行锁定的机会比较大的情况。

三:Memory:
使用MEMORY引擎主要是因为速度,好处就在MEMORY采用的逻辑存储是系统内存,极大的提高了储存数据表的性能; 坏处就是当mysql守护进程崩溃时,所有的Memory数据都会丢失。

一般在以下几种情况下使用Memory存储引擎:

  1. 目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制Memory表的大小,设置此参数,就可以限制Memory表的最大大小。
  2. 如果数据是临时的,而且必须立即使用,那么就可以存放在内存表中。
  3. 存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。

四:MERGE /mɜːdʒ/ :
MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,所以就相当于一个集合器。比起其他储存引擎MERGE不是很优秀,但是在某些情况下MERGE还是非常的有用。

Merge存储引擎的使用场景:

  • 对于服务器日志这种信息,一般常用的存储策略是将数据分成很多表,每个名称与特定的时间端相关。

例如:可以用12个相同的表来存储服务器日志数据,每个表用对应各个月份的名字来命名。当有必要基于所有12个日志表的数据来生成报表,这意味着需要编写并更新多表查询,以反映这些表中的信息。与其编写这些可能出现错误的查询,不如将这些表合并起来使用一条查询,之后再删除Merge表,而不影响原来的数据,删除Merge表只是删除Merge表的定义,对内部的表没有任何影响。

五:ARCHIVE /'ɑ:kaiv/ :
Archive是归档的意思,在归档之后很多的高级功能就不再支持了,仅仅支持最基本的插入和查询两种功能

在MySQL 5.5版以前,Archive是不支持索引,但是在MySQL 5.5以后的版本就开始支持索引了。Archive拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用。

Mysql数据库五大常用数据引擎相关推荐

  1. mysql数据库中常用的类型_MySQL数据库中常用字段类型

    MySQL数据库中常用字段类型 整数型:TINYINT,SMALLINT,INT,BIGINT 小数型:FLOAT,DOUBLE,DECIMAL(M,D) 字符型:CHAR,VARCHAR 日期型:D ...

  2. mysql数据库的在线数据备份与数据恢复

    MySQL是一种常用的关系型数据库管理系统,它支持在线备份和恢复数据.在线备份指的是在MySQL数据库运行时备份数据,而不会中断或影响现有的数据库服务.在本文中,我们将介绍MySQL数据库的在线数据备 ...

  3. MySQL数据库- 几种数据迁移的方法详解都在这了!看完必懂

    数据迁移的几种方式 - MySQL数据库 本文关键字:MySQL.数据库.数据迁移.导入.导出 文章目录 数据迁移的几种方式 - MySQL数据库 一.数据迁移 1. 数据的生命周期 2. 数据迁移的 ...

  4. php mysql取出来,php从mysql数据库中取数据

    php从数据库中取数据  面向过程 $server_name="localhost:3306"; //数据库服务器名称 $username="root"; // ...

  5. mysql数据库中的存储引擎

    mysql数据库中的存储引擎 文章目录 mysql数据库中的存储引擎 mysql中包含的存储引擎 1.InnoDB存储引擎 1.1简介 1.2InnoDB体系架构 1.2.1后台线程 1.2.2内存 ...

  6. java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码

    jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...

  7. php 查看mysql连接数据库_php基础之连接mysql数据库和查询数据

    php基础之连接mysql数据库和查询数据 文章主要介绍了php连接mysql数据库和查询数据的方法和示例,需要的朋友可以参考下,就跟随百分网小编一起去了解下吧,想了解更多相关信息请持续关注我们应届毕 ...

  8. mysql数据库千万级别数据的查询优化和分页测试

    原文地址:原创 mysql数据库千万级别数据的查询优化和分页测试作者:于堡舰  本文为本人最近利用几个小时才分析总结出的原创文章,希望大家转载,但是要注明出处  http://blog.sina.co ...

  9. python链接mysql 判断是否成功_python连接mysql数据库并读取数据的实现

    1.安装pymysql包 pip install pymysql 注: MySQLdb只支持python2,pymysql支持python3 2.连接数据 import pymysql import ...

最新文章

  1. post和get的区别?
  2. 关于结构体里面结构体的申明和使用
  3. 如何计算两个字符串之间的文本相似度?
  4. cdn厂商 同兴万点_CDN进入牌照时代 工信部规范和清理CDN市场
  5. 第五十三天 how can I 坚持
  6. 关于领域驱动设计与面向数据库设计
  7. XUI框架实现自带的tablayout(TabBar指示器)+viewpage实现页面切换?
  8. python语言count什么意思_python中count函数是什么意思?
  9. 揭秘跨境电商亚马逊店铺最新骗局!!小白做亚马逊店铺如何防止上当受骗?
  10. RDA5856ETE系列_(1)新手入门
  11. javax.persistence.EntityNotFoundException: Unable to find 类 with id ?
  12. 浏览器兼容问题及解决方法
  13. errpt and errclear are unnormal
  14. 一个Java开发h5牌九棋牌网站开发细节
  15. Appium 按压元素进行滑动
  16. android搜索app下载地址,如何找出APP的URL Scheme
  17. 悦读(小程序)~~~~~~青龙脚本
  18. 使用itext将HTML 生成PDF文件
  19. Emgucv使用中常用函数总结
  20. mysql的粒度_mysql锁粒度是什么

热门文章

  1. 数据中心柴油发电机系统的使用和维护
  2. Python之gmplot:gmplot库的简介、安装、使用方法之详细攻略
  3. 成功解决ERROR: Unable to find the development tool `cc` in your path; please make sure that you have the
  4. AI公开课:19.05.15施尧耘-达摩院量子实验室主任《量子计算:前景与挑战》课堂笔记以及个人感悟
  5. ##API(七)————日期操作类(二)
  6. (原创)7-1 银行业务队列简单模拟 (30 分)
  7. 自定义获取url方法
  8. 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包 - - 博客频道 - CSDN.NET...
  9. 切换debian8系统语言环境
  10. Gitorious安装与配置