MyISAM

MySQL常见interview

匿名 (未验证) 提交于 2019-12-02 22:02:20
mysql支持的存储引擎,以及各自区别 常用的有myisam,innodb,bdb myisam是mysql默认存储引擎: 不支持事务和外键,访问速度快,对事物完整性没有要求或者以select、insert为主的应用基本都可以使用这个引擎来创建表 innodb 存储引擎支持事务。对比myisam来说,处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引,且支持外键约束 memory 使用存在内存中的内容来创建表。使用这种存储引擎,该库相当于缓存数据库,读写速度都很快。 mysql支持索引类型?配置主键索引? 普通索引 :仅加速查询 唯一索引 :加速查询 + 列值唯一(可以有null) 主键索引 :加速查询 + 列值唯一(不可以有null)+ 表中只有一个 组合索引 :多列值组成一个索引,专门用于组合搜索,其效率大于索引合并 全文索引 :对文本的内容进行分词,进行搜索 主键索引配置 mysql常见日志文件 错误日志、查询日志、慢查询日志、中继日志 innodb存储引擎的重做日志 :作用就是防止在发生故障的时间点,还有脏数据没有写入磁盘,mysql服务重启时,根据重做日志进行重做,达到事务的持久性。事务开始之后产生重做日志,对应事务的脏数据写入到磁盘之后,即释放对应的重做日志 二进制日志 :主从复制时,总库利用主库的binlog进行重复,实现主从同步;用于数据库基于时间点的还原

MYSQL自动备份策略的方案

匿名 (未验证) 提交于 2019-12-02 22:02:20
目前流行几种备份方式: 一、逻辑备份: 使用mysql自带的mysqldump工具进行备份。备份成sql文件形式。 优点:最大好处是能够与正在运行的mysql自动协同工作, 在运行期间可以确保备份是当时的点,它会自动将对应操作的表锁定,不允许其他用户修改(只能访问)。可能会阻止修改操作。sql文件通用方便移植。 缺点:备份的速度比较慢。如果是数据量很多的时候。就很耗时间。如果数据库服务器处在提供给用户服务状态,在这段长时间操作过程中,意味着要锁定表(一般是读锁定,只能读不能写入数据)。那么服务就会影响的。 备注:所谓的与mysql服务器能够自动协同工作,实际上是指加参数来控制mysql服务器,比如锁定所有表只能进行读,不能进行写操作。 二、物理备份: 直接拷贝mysql的数据目录。缺点,你不能去操作正在运行的mysql服务器(在拷贝的过程中有用户通过应用程序访问更新数据,这样就无法备份当时的数据)可能无法移植到其他机器上去。 直接拷贝只适用于myisam类型的表。这种类型的表是与机器独立的。但实际情况是,你设计数据库的时候不可能全部使用myisam类型表。你也不可能:因为myisam类型表与机器独立,方便移植,于是就选择这种表,这并不是选择它的理由。 更多的情况是,你会根据业务特点(比如你需要支持事务机制就必须使用innodb),查询速度和服务性能来选择表类型的。

mysqlhotcopy命令详解

匿名 (未验证) 提交于 2019-12-02 22:02:20
mysqlhotcopy命令详解 前言 mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,数据库大时,占用系统资源较多,支持常用的MyISAM,innodb mysqlhotcopy只是简单的缓存写入和文件复制的过程,占用资源和备份速度比mysqldump快很多很多。特别适合大的数据库,但需要注意的是:mysqlhotcopy只支持MyISAM 引擎 使用mysqlhotcopy需要安装perl支持,因为mysqlhotcopy是prel语言写的。 所以使用前先安装一下啊以下三个perl包 [plain] yum install -y perl perl-DBI perl-DBD-MySQL 安装好了之后呢,如果你正常安装mysql的话,无论是通过yum,apt-get 还是源码安装,那么就可以直接使用 mysqlhotcopy了 mysqlhotcopy原理 mysqlhotcopy是一个Perl脚本,最初由Tim Bunce编写并提供。它使用LOCK TABLES、FLUSH TABLES和cp或scp来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库目录所在的机器上。mysqlhotcopy只用于备份MyISAM。它运行在Unix和NetWare中。 实际操作 这里我个人有个习惯,就是在热备的时候

mysql的索引innodb和myisam, 以及B+Tree和B-Tree详解

匿名 (未验证) 提交于 2019-12-02 22:02:20
版权声明:转载请标明出处~~ https://blog.csdn.net/zzzgd_666/article/details/90722011 一. mysql的索引 mysql常用的索引有以下几种: hash索引 hash索引通过hash值来匹配对应的数据,类似键值对的形式,查找的时候可以精准一次定位,但是对于范围查询,排序效率不高,并且hash索引不能避免全表扫描,因为hash值并不能完全保证一个hash值匹配一个数据(hash冲突),还是需要比对实际数据 btree索引 MySQL里默认和最常用的索引类型,利用二分查找的思想构建的数据结构 全文索引 myisam引擎支持全文索引,innodb在mysql5.6以后也支持全文索引,不过基于mysql很少存储text大文本数据,全文检索也被es替代 二. 二叉树到B-Tree和B+Tree 2.1 二叉树到平衡二叉树 二叉树是一种基础的树结构,它通常由一个根节点和衍生的分支组成.它的特点是: 每个节点都最多只有两个子节点(分支) 二叉树只是一个树结构,在实际应用中还有一种特殊的二叉树,叫二叉查找树. 它在二叉树的基础上,多了一个特点,左边的节点都比右边的节点小 但是可能会出现特殊情况,就会从树状结构变成链表结构,查询效率大打折扣.结构如下 为了解决这个问题,又出现了平衡二叉树. 平衡二叉树的特点就是

MySQL表锁和行锁

匿名 (未验证) 提交于 2019-12-02 21:59:42
锁粒度 MySQL 不同的存储引擎支持不同的锁机制,所有的存储引擎都以自己的方式显现了锁机制,服务器层完全不了解存储引擎中的锁实现: InnoDB 存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。 MyISAM 和 MEMORY 存储引擎采用的是表级锁(table-level locking) BDB 存储引擎采用的是页面锁(page-level locking),但也支持表级锁 默认情况下,表锁和行锁都是自动获得的, 不需要额外的命令。 但是在有的情况下, 用户需要明确地进行锁表或者进行事务的控制, 以便确保整个事务的完整性,这样就需要使用事务控制和锁定语句来完成。 不同粒度锁的比较 表级锁 开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 存储引擎通过总是一次性同时获取所有需要的锁以及总是按相同的顺序获取表锁来避免死锁。 表级锁更适合于以查询为主,并发用户少,只有少量按索引条件更新数据的应用,如Web 应用 行级锁 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 最大程度的支持并发,同时也带来了最大的锁开销。 在 InnoDB 中,除单个 SQL 组成的事务外,锁是逐步获得的,这就决定了在 InnoDB 中发生死锁是可能的。 行级锁只在存储引擎层实现

mysql的索引,事务,引擎

匿名 (未验证) 提交于 2019-12-02 21:59:42
索引: 1、普通索引: create index 自定义索引名称 on 库名.表名(表中的字段); 如:create index student on aa.学生表(学号); 2、唯一性索引: create unique index 自定义索引名称 on 库名.表名(表中的字段); 如:create unique index tudent on aa.学生表(学号); 注:删除索引 DROP INDEX 索引名称 ON 表名 3、主键索引: create table 表名(字段1,字段2……,PRIMARY KEYS(前面的某个字段)); alter table 库名.表名 add PRIMARY KEYS(表的某个字段); 如:create table studentss(id int(4), name char(6),age int(4),PRIMARY KEY(id)); 如:alter table studentss add primary key(id) 注:主键索引和唯一性索引的区别是,唯一性索引可以允许有空值。 注: 删除主键 如果一个主键是自增长的,不能直接删除该列的主键索引, 应当先取消自增长,再删除主键特性 alter table 表名 drop primary key; 【如果这个主键是自增的,先取消自增长.】 具体方法如下: alter table

MySQL面试题

匿名 (未验证) 提交于 2019-12-02 21:59:42
1. 如何设计一个高并发的系统 ① 数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引的优化 ② 使用缓存,尽量减少数据库 IO ③ 分布式数据库、分布式缓存 ④ 服务器的负载均衡 2. 锁的优化策略 ① 读写分离 ② 分段加锁 ③ 减少锁持有的时间 ④ 多个线程尽量以相同的顺序去获取资源 等等,这些都不是绝对原则,都要根据情况,比如不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁。这部分跟面试官谈了很久 3. 索引的底层实现原理和优化 B+树,经过优化的B+树 主要是在所有的叶子结点中增加了指向下一个叶子节点的指针,因此InnoDB建议为大部分表使用默认自增的主键作为主索引。 ① 以“%”开头的LIKE语句,模糊匹配 ② OR语句前后没有同时使用索引 ③ 数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型) order by要怎么处理 alter尽量将多次合并为一次 insert和delete也需要合并 等等 6. 实践中如何优化MySQL 我当时是按以下四条依次回答的,他们四条从效果上第一条影响最大,后面越来越小。 ① SQL语句及索引的优化 ② 数据库表结构的优化 ③ 系统配置的优化 ④ 硬件的优化 变种极多,攻击简单,危害极大 未经授权操作数据库的数据 恶意纂改网页

MySQL聚簇索引

匿名 (未验证) 提交于 2019-12-02 21:59:42
MySQL作为迭代了很多个版本的数据库。在数据库的索引上实现了很多的优化版本,从一开始的只允许一个表有一个列为索引值,到目前版本可支持多个列建立索引值,更多关于索引优化版本的描述,以后有机会笔者再写一篇文章。本文主要介绍索引当中的聚簇索引。 MySQL官方对聚簇索引的定义是,聚簇索引并不是一种单独的索引类,而是一种数据存储方式,第一次看到这段描述,我相信很多人都会一头雾水,索引是一种数据存储结构?这怎么解释?下面笔者一步一步来讲述MySQL对聚簇索引的定义和具体运用。 首先上贴一张图 在MySQL中,有一列值,专门被设定为聚簇索引,这列值就是主键,通常为数字类型的字段。那么如果数据表中没有主键呢?MySQL的解决办法是隐式地将一个唯一的非空的列定义为聚簇。那如果这也没有呢?MySQL就自己创建一个聚簇索引,具体这个聚簇索引内部是怎么建立的,笔者还需要去学习学习。反正无论如何,MySQL都会创建一个聚簇索引。 那么为什么说聚簇索引是一种数据存储结构呢?原因是MySQL将索引(即主键)对应的每一条记录都以链表的形式存储在索引的叶子页中,那么很容易理解,聚簇索引就是表,而反过来说,表以聚簇索引的形式来存储。那么是所有的MySQL存储引擎都采用聚簇索引这种数据存储结构吗?答案是否定的,在MySQL中,只用Innodb引擎才采用聚簇索引,其他的存储引擎像MyISAM采用非聚簇索引。

MySQL体系结构

匿名 (未验证) 提交于 2019-12-02 21:59:42
MySQL 体系结构及存储引擎 体系结构 MySQL体系结构 MyISAM存储引擎 由于该存储引擎不支持事务、也不支持外键,所以访问速度较快。因此当对事务完整性没有要求并以访问为主的应用适合使用该存储引擎。 InnoDB存储引擎 mysql 5.5版本以后默认的存储引擎 由于该存储引擎在事务上具有优势,即支持具有提交、回滚及崩溃恢复能力等事务特性,所以比MyISAM存储引擎占用更多的磁盘空间。因此当需要频繁的更新、删除操作,同时还对事务的完整性要求较高,需要实现并发控制,建议选择。 MEMORY MEMORY存储引擎存储数据的位置是内存,因此访问速度最快,但是安全上没有保障。适合于需要快速的访问或临时表。 BLACKHOLE 黑洞存储引擎,写入的任何数据都会消失,可以应用于主备复制中的分发主库。 物理文件 物理文件包括:日志文件,数据文件,配置文件,pid文件,socket文件等 日志文件 error log 错误日志 排错 /var/log/mysqld.log【默认开启】 bin log 二进制日志 备份 增量备份 DDL DML DCL Relay log 中继日志 复制 接收 replication master slow log 慢查询日志 调优 查询时间超过指定值 log-error=/var/log/mysqld.log log-bin=/var/log/mysql

Spring Boot干货系列:(十二)Spring Boot使用单元测试(转)

[亡魂溺海] 提交于 2019-12-02 21:32:53
前言 这次来介绍下Spring Boot中对单元测试的整合使用,本篇会通过以下4点来介绍,基本满足日常需求 Service层单元测试 Controller层单元测试 新断言assertThat使用 单元测试的回滚 正文 Spring Boot中引入单元测试很简单,依赖如下: 本篇实例Spring Boot版本为1.5.9.RELEASE,引入spring-boot-starter-test后,有如下几个库: • JUnit — The de-facto standard for unit testing Java applications. • Spring Test & Spring Boot Test — Utilities and integration test support for Spring Boot applications. • AssertJ — A fluent assertion library. • Hamcrest — A library of matcher objects (also known as constraints or predicates). • Mockito — A Java mocking framework. • JSONassert — An assertion library for JSON. • JsonPath —