嘟嘟最不愿意做的就是翻招聘信息。

  

  因为一翻招聘信息,工作经历你写低于两年都不好意思,前后端必须炉火纯青融汇贯通,各式框架必须如数家珍不写精通咋的你也得熟练熟练,

对了你是985吗?你是211吗??你不是前两个你咋的也得是个本科吧。。你本科你还得计算机专业(脑瓜疼。。脑瓜疼),我脑瓜疼完了还不行,你

还得会点儿数据库优化,还得处理处理高并发。。。嘟嘟这种菜鸟一看见这些东西就想去路边摊买个大西瓜,把西瓜吃完,再把脑袋塞西瓜里边凉快凉

快。

  但是转念一想,好像两年编程经历如果不会点儿数据库优化不会点儿多线程高并发啥的别人可能以为你去收拾卫生去了。。。

  好吧好吧嘟嘟就一边学一边整理一下子数据库优化到底是优化个啥了,到时候碰到面试官还能对吹个几回合。

  MySql的那些个存储引擎

  

  话说MySql为啥有那老些个存储引擎?这个是有历史原因的。因为MySql是个开源的数据库,但是呢有一堆的人对MySql有着不同的期待。

比如说甲想让MySql读取贼6,增删就不太要求,乙却正好相反。这种众口难调的需求现状就导致MySql把存储引擎给开源了:“你们自己写存储

引擎吧,存储方式啥的你们都自己定”。于是乎,MySql的存储引擎就多了。

  至于存储引擎到底是森么??数据库引擎是一种算法及IO的操作方式。算法:如何存数据(存什么样的文件里,文件格式什么样,分成几个

文件诸如此类)。IO操作(如何去访问,怎么做增删改查,磁盘上的文件我是通过物理地址去访问还是怎么得。。。。。)看到这里,嘟嘟仿佛

看到了简单的“存储引擎”四个字背后的宏大与可怕,故事往往就是没这么简单。先上几个比较常见的数据库存储引擎并且粗浅的认识一哈。

  

  1.ISAM

  因设计之时考虑到查询次数远大于更新次数,ISAM以其读取速度快并且所需内存等资源小的特性曾经广受大家喜爱,经久不衰。

  ISAM也有自己的缺点,不能容错,没有事务处理(这个挺要命),不支持数据恢复。如果用在关键应用程序里面,还得经常备份。硬盘崩溃

后无法恢复数据。

  

  2.MyISAM 

  ISAM拓展格式(MySql5.5之前默认引擎)提供了索引和字段管理等功能,增加表格锁定机制优化多个并发读写操作。但是需要经常使用一个

OPTIMIZE TABLE 命令来恢复被更新机制所浪费的空间,重要缺陷是表损坏后无法恢复数据(ISAM是硬盘坏了无法恢复数据)。

  MyISAM继承了ISAM多有特性,也不支持事物(。。。。)。

  如果使用该数据库引擎,则会生成三个文件:(存储方式)

    .frm (表结构信息)   desc命令查看的就是这个表。

    .MYD (数据文件)    表中的具体数据。

    .MYI (表的索引信息) 索引文件的内容要远远少于数据文件,所以查询的时候只要where 条件中带有索引信息,就会先找

MYI文件 MYI文件是以key-value形式存储,key(索引这一列的某个值),value(对应的那条数据的物理磁盘地址)。

  如果发生增删改,则需要更改.MYD和.MYI两个文件,这也是他增删改慢的原因,数据越多,写操作越低。因为要维护数据和索引的信息

  因为在WEB开发中所进行的大部分操作都是读操作,所以MyISAM广受WEB开发者的青睐。

  3.InnoDB(这个名字嘟嘟见过。。)

  比ISAM和MyISAM相对慢一些,但是它支持事务处理和外键处理,MySql5.5以上常用默认引擎,InnoDB锁定在行级。InnoDB定义在表级

别上(如果你心情好的话可以使用一个InnoDB的表加上一个ISAM的表加上一个MyISAM的表进行三表联合查询。。)InnoDB处理大数据量时

效率贼高

  InnoDB 的表数据和索引都在一个文件里面

  

但是MySql5.7版本就被分成了两个文件.frm(数据)和.ibd(索引)

  4.InnoDB 和 MyISAM的区别

    (1)InnoDB支持事务,每一条sql语句都会默认封装成事务并且自动提交(影响速度),所以最好用 begin transaction 和 commit 之间插入多

条sql语句组成一个事务。

  (2)InnoDB支持外键,MyISAM不支持,对于一个包含外键的InnoDB表转化为MyISAM会失败

  (3)InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键!!通过主键索引效率很高。但是辅助索引需要两次查询,先通过辅助索引

查询到主键然后通过逐渐查询到数据,所以主键不能过大。MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助

索引是独立的。

  (4)InnoDB不保存表的具体行数,执行select count(*) from table 的时候会进行全表扫面,而MyISAM(frm文件里面)用了一个变量保存了整个

表的行数,执行以上语句只需要读出变量即可。

  (5)InnoDB不支持全文索引,MyISAM支持全文索引,查询效率上MyISAM要高。

  第一部分嘟嘟就写这么多吧。因为如果多了的话嘟嘟怕各位看官看不下去。反正嘟嘟看别人的文章的时候就有这种感觉(当然更多的时候是因为看不懂)

嘟嘟以后写博客的目标就是尽量写的通俗易懂,能用大白话就用大白话,技术性太强对于嘟嘟这种新手而言实在是一时消化不了。

  

  

  

  

  

  

  

  

  

  

  

  

  

   

  

  

  

  

最新文章

  1. SQL Server 数据库备份
  2. 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.5,增加自拍头像功能、细节优化(源码)
  3. 安装LNMP之后出现 Access denied.解决方法
  4. apache+tomcat分布式搭建
  5. Kernel Function--核函数收集
  6. Java Hour8
  7. 【转】线程、Thread类和线程终止
  8. linux第1天 fork exec 守护进程
  9. iOS - Swift Set 集合
  10. Linux下MySQL使用
  11. 安装ImageMagick扩展出现configure: error: not found. Please provide a path to MagickWand-config or Wand- config program
  12. VS2015使用OSChina的git功能
  13. oracle 存储过程,函数和包
  14. SourceTree 03 - 跳过账号登录直接进入主界面
  15. hdoj:2050
  16. Percona MySQL 5.7 Linux通用二进制包安装(CentOS 6)
  17. [JLOI2015]装备购买 (高斯消元)
  18. String中根据,(逗号)进行分割
  19. R语言可视化学习笔记之添加p-value和显著性标记--转载
  20. 解析JSON 注意解析数据为一个对象的情况.--加一下说明

热门文章

  1. ASP.NET MVC5快速入门--MyFirstWeb并发布到Windows Azure上
  2. 代理Delegate的小应用(使用setModelData设置下拉日期对话框)
  3. Qt5 中对 C++11 一些新特性的封装
  4. 重定向Redirect 的知识
  5. F#周报2019年第26期
  6. kubernetes实战篇之通过api-server访问dashboard
  7. Codeblocks 批量注释与对齐快捷键的教学方法
  8. 数读 | 为什么运维朋友们都需要学Python?
  9. 使用CocoaPods创建自己的私有库-iOS组件化第一步
  10. [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist