持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情
oracel索引的详细讲解:blog.csdn.net/u012316953/…
mysql索引的详细讲解:
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而不是地址是因为在数据库中进行增删改查的时候,数据的地址会发生变化),而是主键值,辅助索引访问数据总是需要二次查找。
(1)聚簇索引:
将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据
(2)非聚簇索引:
将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置
6.最左前缀原则
7.创建索引的指导原则
(1)按照下列标准选择建立索引的列
频繁搜索的列
经常用作查询选择的列
经常排序、分组的列 经常用作连接的列(主键/外键)
(2)不要使用下面的列创建索引
仅包含几个不同值的列
表中仅包含几行
使用索引时注意事项
查询时减少使用*返回全部列,不要返回不需要的列
索引应该尽量小,在字节数小的列上建立索引
WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前
避免在ORDER BY子句中使用表达式
9.查看索引
语法:
SHOW INDEX FROM table_name;
示例:查看myschool数据库中全部索引信息
USE myschool;
SHOW INDEX FROM `student`\G;
10.创建和删除索引
/*使用数据库*/
use myschoolTwo;
-- 创建索引 create index
`index_gradeName`
on grade(`gradeName`);
-- 删除索引 drop index index_gradeName on grade;
删除表时,该表的所有索引同时会被删除
11使用mysqldump命令备份数据库
语法:
常用参数选项
| 参数 | 描述 |
| -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.恢复数据库
13.方法一恢复备份的操作流程
14.恢复数据库方法二:
方法二的操作流程:
15.表数据导出到文本文件
16.文本文件导入到数据表
/* 备份与还原 */
------------------
备份,将数据的结构与表内数据保存起来。
利用 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密码 库名 表1 表2 表3 > 文件名(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.总结