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要高。
第一部分嘟嘟就写这么多吧。因为如果多了的话嘟嘟怕各位看官看不下去。反正嘟嘟看别人的文章的时候就有这种感觉(当然更多的时候是因为看不懂)
嘟嘟以后写博客的目标就是尽量写的通俗易懂,能用大白话就用大白话,技术性太强对于嘟嘟这种新手而言实在是一时消化不了。
MySql的数据库优化到底优啥了都??(1)的更多相关文章
- MySql的数据库优化到底优啥了都??(2)
嘟嘟在写此篇文章之前心里先默念(简单,通俗,工整)*10 吟唱完了,进入正题 3.Memory存储引擎 除了存放一个表结构相关信息的.frm文件在磁盘上,其他数据都存储在内存中.说白点哪天你数据库死机 ...
- MySql的数据库优化到底优化啥了都(3)
嘟嘟在上两个文章里面简单粗糙的讲了讲关于MySql存储引擎的一些特性以及选择.个人感觉如果面试官给我机会的话,至少能说个10分钟了吧.只可惜有时候生活就是这样:骨感的皮包骨头了还在那美呢.牢骚两句,北 ...
- MySQL/Oracle数据库优化总结
MySQL数据库优化的八种方式 1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能 ...
- MySQL之数据库优化
Mysql数据库的优化技术 对mysql优化是一个综合性的技术,主要包括 •表的设计合理化(符合3NF) •添加适当索引(index) [四种: 普通索引.主键索引.唯一索引unique.全文索引] ...
- MySQL:数据库优化,看这篇就够了
数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的相应速度,同时还要尽可能的节约系统资源,以便让系统提供更大的负荷. 1. 优化一览 ...
- Mysql实例 数据库优化
目录 一.前言 二.数据库表设计 三.数据库结构设计 四.数据库性能优化 硬件配置选择 数据库配置优化 系统配置优化 数据库安全优化 五.数据库架构扩展 增加缓存 主从复制与读写分离 分库 分表 分区 ...
- 常见的Mysql数据库优化总结
索引 1.主键索引 作用:唯一约束和提高查询速度 #建表时创建主键索引 create table `table_name`( `id` int unsigned not null auto_incre ...
- mysql优化-数据库优化、SQL优化
我有一张表w1000,里面有1000万条数据,这张表结构如下:CREATE TABLE `w1000` ( `id` varchar(36) NOT NULL, `name` varchar(10) ...
- mysql 百万级数据库优化方案
https://blog.csdn.net/Kaitiren/article/details/80307828 一.百万级数据库优化方案 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 wher ...
随机推荐
- delphi控件安装(安装ODAC、TeeChart、TServerSocket、TWSocketServer、TComm)
一.oracle插件安装delphi7如何安装oracle access控件 假设ODAC主目录在 D:\dzj\odac Delphi7主目录在 D:\Program Files\Borland\D ...
- 高性能JSON解析器及生成器RapidJSON
RapidJSON是腾讯公司开源的一个C++的高性能的JSON解析器及生成器,同时支持SAX/DOM风格的API. 直击现场 RapidJSON是腾讯公司开源的一个C++的高性能的JSON解析器及生成 ...
- Google Protocol Buffer 的使用和原理(无论对存储还是数据交换,都是个挺有用的东西,有9张图做说明,十分清楚)
感觉Google Protocol Buffer无论对存储还是数据交换,都是个挺有用的东西,这里记录下,以后应该用得着.下文转自: http://www.ibm.com/developerworks/ ...
- git如何merge github forked repository里的代码更新
git如何merge github forked repository里的代码更新? 问题是这样的,github里有个项目ruby-gmail,我需要从fork自同一个项目的另一个repository ...
- nginx(一) nginx详解
nginx是一个被广泛使用的集群架构组件,我们有必要对它有足够的了解.下面将先认识nginx:包括应用场景.nginx基本架构.功能特性.并发模型以及配置说明,最后我们再总结下,为什么选择nginx的 ...
- java.lang.Integer cannot be cast to java.lang.String
错误原因是类型转换! 说Integer 类型不能转成String类型. 解决办法: 将错误中的(String)强制转换类型修改为 object.toString() toString方法是Ja ...
- sentinel 核心概念
编者注:前段时间笔者在团队内部分享了sentinel原理设计与实现,主要讲解了sentinel基础概念和工作原理,工作原理部分大家听了基本都了解了,但是对于sentinel的几个概念及其之间的关系还有 ...
- Spring Boot:使用Memcached缓存
综合概述 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统.Memcached基于内存的key-value存储,用来存储小块的任意数据,这些数据可以是数据库调用.API调用或者是页面 ...
- Spring Bean的3种装配方式
Bean常用的装配方式有3种: 基于xml的装配 基于Annotation(注解)的装配 基于Java类的装配 基于xml的装配 在xml文件中配置Bean. 如果依赖很多,xml配置文件会很臃肿,后 ...
- Storm 学习之路(八)—— Storm集成HDFS和HBase
一.Storm集成HDFS 1.1 项目结构 本用例源码下载地址:storm-hdfs-integration 1.2 项目主要依赖 项目主要依赖如下,有两个地方需要注意: 这里由于我服务器上安装的是 ...