索引、备份和恢复

220 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情

oracel索引的详细讲解:blog.csdn.net/u012316953/…

mysql索引的详细讲解:

www.cnblogs.com/xfych/p/150…

1.什么是索引:

一种帮助MySQL提高查询速率的索引数据结构

(1).索引的优点:

大大的加快数据查询速度

(2)索引的缺点:

维护索引需要耗费数据库资源 
索引需要占用磁盘空间 
当对表的数据进行增删改查的时候,因为要维护索引,
速度会受到影响

2.索引的分类(面试必问)

主键索引、

单值索引(单列索引、普通索引)、

唯一索引、

复合索引 在InnoDB引擎中使用: (1)主键索引

设定为主键后数据库会自动建立索引,innodb为聚簇索引 主键索引索引列值不能为空

(2)单值索引(单列索引、普通索引)

即一索引只包含单个列,一个表可以有多个单列索引 id name index age index born

(3)唯一索引

索引的值必须唯一,但允许有空值 唯一索引索引值可以存在null,但是只能存在一个null

(4)复合索引

即一个索引包含多个列 id (name age ) index born

在MYISAM中使用:

e.Full Text : 全文索引(My5.7版本之前 只能用于MYISAM引擎)

全文索引类型为FULL TEXT ,在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值,全文索引可以在CHAR、VARCHA、TEXT类型列上创建。MYSQL只有MYISAM存储引擎指出全文索引 MYSQL数据库中使用了b+tree 的存储方式存储数据,b+tree是基于b-tree的基础上优化而来的

3.b+tree 和 b-tree的区别;(通俗一点的理解:叶子节点就是tree的最下层节点,没有子节点的节点)

b+tree只有叶子节点存储数据 
b-tree的非叶子节点必须得存储数据

4.mysql的底层事件:

其实就是一个b+tree,首先我们在放入数据的时候,他会基于数据去排序,之后会把数据以链表的形式用指针连接起来,同时mysql在底层为了进一步优化,它是基于b+tree的数据结构以分页的形式去存储数据的,默认一页的大小为16kb,一般三层的b+tree可以存储8--10亿的数据,如果是基于主键的形式去查的话,最多动用两次磁盘IO,因为他的顶层是常驻内存的,如果是基于非主键查询的话最多需要动用三次磁盘IO,因为在最底层需要通过非主键字段去查询主键,然后再根据主键再去一层一层的查询数据。

5.聚簇索引和非聚簇索引

聚簇索引不一定是主键索引,主键索引一定是聚簇索引

在聚簇索引之上建立的索引都是非聚簇索引,一个表中只能有一个聚簇索引,剩下的都是非聚簇索引

注意:在innodb中,在聚簇索引之上创建的索引称之为辅助索引,非聚簇索引都是辅助索引,像复合索引、前缀索引(普通索引)、唯一索引。辅助索引叶子节点存储的不再是行的物理位置(非聚簇索引查找是找的是id而不是地址是因为在数据库中进行增删改查的时候,数据的地址会发生变化),而是主键值,辅助索引访问数据总是需要二次查找。

image.png (1)聚簇索引:

将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据

(2)非聚簇索引:

将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置

image.png

image.png 6.最左前缀原则

image.png 7.创建索引的指导原则

(1)按照下列标准选择建立索引的列

频繁搜索的列 
经常用作查询选择的列 
经常排序、分组的列 经常用作连接的列(主键/外键)

(2)不要使用下面的列创建索引

仅包含几个不同值的列 
表中仅包含几行

使用索引时注意事项

查询时减少使用*返回全部列,不要返回不需要的列 
索引应该尽量小,在字节数小的列上建立索引
WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前
避免在ORDER BY子句中使用表达式

9.查看索引

语法:

SHOW INDEX FROM table_name;

示例:查看myschool数据库中全部索引信息

USE myschool; 
SHOW INDEX FROM `student`\G;

image.png 10.创建和删除索引

/*使用数据库*/ 
use myschoolTwo;
-- 创建索引 create index 
`index_gradeName` 
on grade(`gradeName`);
-- 删除索引 drop index index_gradeName on grade;
删除表时,该表的所有索引同时会被删除

11使用mysqldump命令备份数据库

语法:

image.png

image.png 常用参数选项

参数 描述
-add-drop-table在每个CREATE TABLE语句前添加DROP TABLE语句,默认是打开的,可以用-skip-add-drop-table来取消
--add-locks该选项会在INSERT 语句中捆绑一个LOCK TABLE 和UNLOCK TABLE 语句好处:防止记录被再次导入时,其他用户对表进行的操作
-t或-no-create-info只导出数据,而不添加CREATE TABLE语句
-c或--complete-insert在每个INSERT语句的列上加上列名,在数据导入另一个数据库时有用
-d或--no-data不写表的任何行信息,只转储表的结构

12.恢复数据库

image.png

image.png 13.方法一恢复备份的操作流程 0 14.恢复数据库方法二:

image.png 方法二的操作流程:

image.png

image.png 15.表数据导出到文本文件

image.png 16.文本文件导入到数据表

image.png

/* 备份与还原 */ 
------------------ 
备份,将数据的结构与表内数据保存起来。
利用 mysqldump 指令完成。 
-- 导出 mysqldump [options] db_name [tables] mysqldump [options] 
---database DB1 [DB2 DB3...] mysqldump [options] 
--all--database 
1. 导出一张表 mysqldump -u用户名 -p密码 库名 表名 > 文件名(D:/a.sql) 
2. 导出多张表 mysqldump -u用户名 -p密码 库名 表123 > 文件名(D:/a.sql)
3. 导出所有表 mysqldump -u用户名 -p密码 库名 > 文件名(D:/a.sql) 
4. 导出一个库 mysqldump -u用户名 -p密码 --lock-all-tables --database 库名 > 文件名(D:/a.sql) 可以-w携带WHERE条件 -- 导入 
1. 在登录mysql的情况下: source 备份文件 
2. 在不登录的情况下 mysql -u用户名 -p密码 库名 < 备份文件

17.总结

image.png