数据库复习指南

2019-03-13  本文已影响0人  孟辜

索引分析工具:explain

数据库优化。表很大之后,insert变得很慢,如何优化?
Mysql查询很慢,如何定位原因?

处理慢查询有三个主要的技巧:《MySQL排错指南》 P23

1. 调优查询本身;

通过强大的查询调优工具EXPLAIN。这个工具为用户提供了服务器实际上如何执行查询的详细信息。通过EXPLAIN能够看到经过查询优化器优化后的select语句的真正的样子,从中找出可以优化的可能性。

2. 调优表(包括添加索引);

在与WHERE,JOIN和GROUP BY语句相关的列上添加索引可以加速查询。

3. 调优服务器。

个人体会:凡是涉及数据库,一般就几个核心的点:

1. 事务

2. 索引

3. 分布式(分库分表)

当没有思路时,可以想想这三点,看能不能沾上边。

索引失效的场景

- 联合索引没有头索引或者中间断开

- 索引列使用计算

- like前缀索引写成了%kk

- 索引是字符串,但是传的值不带单引号,导致全表扫描;

- 索引字段上使用不等于

Innodb 和 Myisam 区别:

如果有人问你数据库的原理,叫他看这篇文章

一 概念

1. SQL join 语句

2. 数据库的三大范式

1. 第一范式 1NF

   表中所有属性域都是**原子的,不可再分**。

   - 一个若干名字的集合是非原子的,例如Children属性是一些名字的集合,不满足第一范式;

   - 组合属性也不是原子的,例如address可以分为city+street,不满足第一范式;

2. 第二范式 2NF

  在满足1NF基础上,要求表中非主键列依赖于主键,而不是依赖于主键的一部分,考虑联合主键。

3. 第三范式 3NF

   要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

3. RAID

RAID0,RAID1,RAID3,RAID5,RAID6

二 事务

1. ACID

2. 事务的隔离级别

三 索引

1. 理解:数据库索引&数据结构

二叉树,B树,B+树

四 存储引擎InnoDB

1. MySQL存储引擎InnoDB1

2. MySQL存储引擎InnoDB2-锁

innodb什么时候使用行级锁和什么时候使用表级锁

众多资料中都说innodb使用的是行级锁,但实际上是有限制的。只有在你增删改查时匹配的条件字段带有索引时,innodb才会使用行级锁,在你增删改查时匹配的条件字段不带有索引时,innodb使用的将是表级锁。因为当你匹配条件字段不带有所引时,数据库会全表查询,所以这需要将整张表加锁,才能保证查询匹配的正确性。在生产环境中我们往往需要满足多人同时对一张表进行增删改查,所以就需要使用行级锁,所以这个时候一定要记住为匹配条件字段加索引。

提到行级锁和表级锁时我们就很容易联想到读锁和写锁,因为只有触发了读写锁,我们才会谈是进行行级锁定还是进行表级锁定。那么什么时候触发读锁,就是在你用select 命令时触发读锁,什么时候触发写锁,就是在你使用update,delete,insert时触发写锁,并且使用rollback或commit后解除本次锁定。

3. Mysql 中 MyISAM 和 InnoDB 的区别有哪些?

InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;

InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;

InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;

五 Mysql性能优化

第四章:Scheme和数据类型的优化

1. 选择优化的数据结构

2. 特定问题

太多的列

从行缓冲中拷贝过来的列转换成数据结构的代价是很高的,例如数千个字段。

Alert table 开销

mysql修改表的大部分操作是用新的结构创建一个空表,从旧表中查出所有数据再删除旧表。

3. 提高读查询的速度

额外的索引

增加冗余列

汇总表(每小时统计一次)

缓存表:优化搜索和查询,需求是很多不同的索引组合来加速查询,创建一张只包含主表部分列的缓存表。

第五章:索引优化

1. 索引查找特定行,避免全表扫描;

2. 索引可以让查询锁定更少的行;

3. InnoDB在二级索引上使用共享锁,在访问主键索引需要排他锁;

[图片上传失败...(image-b4f0a2-1552459199375)]

第六章:查询优化

1. 优化访问

六 分布式数据库

OLTP VS OLAP
分布式事务 XA

场景:异地转账,下单去库存(订单系统和库存系统两地)

重点:所有参与的事务要么都提交,要么都回滚。

[图片上传失败...(image-a3432b-1552459199375)])

资源管理器:通常一个数据库就是一个资源管理器;mysql数据库

事务管理器:协调参与全局事务的各个事务,需要和全局事务的所有资源管理器进行通信;连接mysql服务器的客户端

分布式事务使用两阶段提交的方式:2PC

第一阶段:参与全局事务的节点prepare,告诉事务管理器他们准备好提交了。

第二阶段:事务管理器告诉资源管理器执行 rollback 还是 commit。

考虑各种异常情况

分库分表

1. 分库代价

2. 分表:垂直分表+水平分表

上一篇下一篇

猜你喜欢

热点阅读