MySql的数据库优化到底优啥了都??(1)

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

  

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

对了你是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要高。

 

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

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

 

 

  

  

  

  

 

  

  

 

  

  

 

 

  

 

  

 

  

  

  

 

   

  

 

 

  

 

  

  

posted @ 2019-07-22 17:17  吃瓜癞嘟嘟  阅读(205)  评论(0编辑  收藏  举报