mysql优化

mysql优化

存储引擎

  • mysql的体系结构图如下图

image

  • 其中存储引擎是mysql中重要的一环,并可由用户自己选择决定。

存储引擎

一种用来存储MySQL中对象(记录和索引)的一种特定的结构(文件结构) 存储引擎,处于MySQL服务器的最底层,直接存储数据。导致上层的操作,依赖于存储引擎的选择。

Create table tableName () engine=myisam|innodb;

总结:存储引擎就是特定的数据存储格式(方案)

  • Show engines

查看当前MySQL支持的存储引擎列表

image

不同存储引擎的特点

Innodb

版本>=5.5 默认的存储引擎,MySQL推荐使用的存储引擎。 提供事务,行级锁定,外键约束的存储引擎。 事务安全型存储引擎。更加注重数据的完整性和安全性。

  • 存储格式

数据,索引集中存储,存储于同一个表空间文件中。 数据(记录行) 索引(一种检索机制,也需要一定的空间) 创建innodb表后,存在文件如下: .frm 表结构文件。

image

Innodb表空间文件:innodb的数据和索引。

image

该位置,可以被配置的。 默认,所有的innodb表的表空间文件,都在同一个空间中。 通过配置,达到每张innodb表,一个表空间文件的目的:

image

开启配置

image

image

  • 数据按照主键顺序存储

插入时做排序工作,效率低。

  • 特定功能

事务:

外键约束:

维护数据完整性。

  • 并发性处理:

擅长处理并发的。

行级锁定: row-level

locking,实现了行级锁定,在一定情况下,可以选择行级锁来提升并发性。也支持表级锁定,innodb根据操作选择。

版本并发控制, MVCC,效果达到无阻塞读操作。

MyISAM

  • <= 5.5 MySQL默认的存储引擎。 ISAM:Indexed Sequential Access Method(索引顺序存取方法)的缩写,是一种文件系统。 擅长与处理 高速读与写。
  • 存储方式

数据索引分别存储于不同的文件中。

image

  • 数据的存储顺序为插入顺序

插入速度快,空间占用量小。

  • 功能

全文索引支持。(>=5.6 innodb 支持)

数据的压缩存储。.MYD文件的压缩存储。

压缩:工具 myisamPack完成 压缩功能:

执行压缩指令 myisampack 表名

注意,压缩后,需要重新修复索引:

myisamchk -rq myisam_2

更新数据:myisamchk –unpack 表名

  • 并发性:

    • 仅仅支持表级锁定。
    • 支持 并发插入。写操作中的插入操作,不会阻塞读操作(其他操作)
  • Innodb PK myisam:

数据完整性,并发性处理,擅长更新,删除。

高速查询及插入。擅长 插入,查询。

Archive

存档型 仅提供 插入和查询操作。非常高效 无阻塞的插入和查询。

Memory

内存型 数据存储于内存中,存储引擎。缓存型存储引擎。

插件式存储引擎

  • 当客户端操作表(记录)时,为了保证操作的隔离性(多个客户端操作不能互相影响),通过加锁来处理。

  • 操作方面:

    • 读锁:读操作时增加的锁,也叫共享锁,S-lock。特征是 阻塞其他客户端的写操作,不阻塞读操作。
    • 写锁:写操作时增加的锁,也叫独占锁或排他锁,X-lock。特征,阻塞其他客户端的读,写操作。
  • 锁定粒度(范围):

    • 行级:提升并发性,锁本身开销大
    • 表级:不利于并发性,锁本身开销小。

类型选择

  • 尽可能小(占用存储空间小)
  • 尽可能定长(占用存储空间固定)
  • 尽可能使用整数

范式,逆范式(冗余数据,不建议)

索引的使用

什么是索引

  • 利用关键字,就是记录的部分数据(某个字段,某些字段,某个字段的一部分),建立与记录位置的对应关系,就是索引。 索引的关键字一定是排序的。

image

索引类型

  • 4种类型:

主索引,唯一索引,普通索引,全文索引。 无论任何类型,都是通过建立关键字与位置的对应关系来实现的。 以上类型的差异:对索引关键字的要求不同。 关键字:记录的部分数据(某个字段,某些字段,某个字段的一部分)。

普通索引,index: 对关键字没有要求。

唯一索引,unique index: 要求关键字不能重复。同时增加唯一约束。

主键索引,primary key: 要求关键字不能重复,也不能为NULL。同时增加主键约束。

全文索引,fulltext key: 关键字的来源不是所有字段的数据,而是从字段中提取的特别关键词。

  • 关键字的来源:可以是某个字段,也可以是某些字段。如果一个索引通过在多个字段上提取的关键字,称之为 复合索引。

管理索引语法

  • 创建(创建表时)

image

TiP;索引可以起名字,但是主索引不能起名字,因为一个表仅仅可以有一个主索引,其他索引可以出现多个。名字可以省略,mysql会默认生成,通常使用字段名来充当。

  • 更新表结构

image

Tip:

  1. 如果表中存在数据,数据符合唯一或主键的约束才可能创建成功。
  2. Auto_increment属性,依赖于一个KEY。
  • 删除

image

Explain 执行计划

可以通过在select语句前使用 explain,来获取该查询语句的执行计划,而不是真正执行该语句。

索引场景

  • 索引检索

条件过滤

  • 索引排序

如果order by 排序需要的字段,上存在索引,可能使用到索引。

  • 索引覆盖

索引拥有的关键字内容,覆盖了查询所需要的全部数据,此时,就不需要在数据区获取数据,仅仅在索引区即可。

索引使用原则

  • 列独立

如果需要某个字段上使用索引,则需要在字段参与的表达中,保证字段独立在一侧。

image

第三个语句 empno-1就不是列独立:就不能用索引。类似函数内等。

  • 左原则

Like:匹配模式必须要左边确定不能以通配符开头。

image

业务逻辑上出现: field like ‘%keywork%’;类似查询,需要使用全文索引。

  • OR的使用

必须要保证 OR 两端的条件都存在可以用的索引,该查询才可以使用索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值