【MySQL】索引(索引分类、索引失效)与视图详解

一、索引

1.索引概述

索引就是为了提高查询效率的一种机制。

注意
① 在任何数据库中,主键所在的字段会自动添加默认的索引;若某一字段被unique约束,则该字段也会添加索引。
② 在任何数据库中,任何一张表的任何一条记录在硬盘存储上都有—个硬盘的物理存储编号。
③ 在MySQL中,索引是一个单独的对象,不同的存储引擎以不同的形式存在。
MyISAM:索引存储在.MYI文件;InnoDB:索引存储在tablespace;MEMORY:存储在内存。
查询时的两种方式:全表扫描、根据索引检索

2.索引实现原理

理解MySQL索引原理和实现
B+树索引是数据库中使用最为频繁的一种索引,B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。
在这里插入图片描述

3.何时需要索引

① 数据量庞大
② 该字段经常出现在where子句的后面作为筛选条件出现
③ 该字段很少进行DML操作(insert、delete、update)(DML操作后,索引需要重新排序。)
(建议使用主键作为索引,索引需要占用内存,也需要维护)

4.创建索引

(1)单列索引
语法格式:create index 索引名 on 表名(字段名...);

create index ename_iindex on emp(ename);

在这里插入图片描述
(2)复合索引
语法格式:create index 索引名 on 表名(字段名1,字段名2...);
在这里插入图片描述

5.删除索引

语法格式:drop index 索引名 on 表名;

drop index ename_iindex on emp;

在这里插入图片描述

6.查看查询语句是否使用索引检索

语法格式:explain 查询语句

explain select * from emp where ename = "KING";

在对ename字段设置了索引之后,查询效率从全表扫描变为索引扫描,查询速度从14行扫描提升到1行检索。
在这里插入图片描述

7.索引失效

索引失效共有7种情况,如下:
(1)使用模糊查询时,以”%“开头索引会失效。
策略:模糊查询时避免使用”%“开头
如:select * from emp where ename like "%H";
如下,尽管对ename字段创建了索引,但是使用了以“%”开头的模糊查询,索引失效,仍然是全表扫描14次。
在这里插入图片描述
(2)where筛选条件中,or语句中前后字段没有同时都为索引
策略:当or两边的连接条件只有一个有索引时,使用union操作替换or
(or连接的两个条件,一边有索引,另一边没有索引,导致索引失效;两边都有索引,索引不会失效)
在这里插入图片描述
(3)使用复合索引时,未使用左侧的列查找
策略:尽量使用左侧的或者两个索引同时使用
在这里插入图片描述
(4)where筛选条件中索引参与数学运算
策略:参与数学运算的列不要设置为索引字段
在这里插入图片描述
(5)where筛选条件中索引使用了函数
策略:需要经常使用函数处理的字段不设置索引
在这里插入图片描述
(6)索引字段中使用is null 、is not null 、!=、<>
在这里插入图片描述

8.索引分类

索引分类
(1)单一索引:在一个字段上添加索引
(2)复合索引:两个及以上字段上添加索引
(3)主键索引:主键上添加索引
(4)唯一性索引:具有unique约束的字段上添加索引(索引列的值必须唯一,但允许有空值)
(5)全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较。

二、视图

1.视图: 视图就是在不同的角度看待同一张表。
注意:视图本身不存在,对视图数据的增删改查操作,会导致原表被操作。
2.创建视图
语法格式:create view 视图名 as select 字段名1,字段名2... from 表名;
(as后面只能是查询语句,结果集可以是多列或者一列)
在这里插入图片描述
对t_students表创建视图

create view stu_view as select * from t_students;

视图stu_view中的数据来自t_students表中。
在这里插入图片描述
删除视图stu_view中的数据,原表t_students中的数据被删除
在这里插入图片描述
先视图stu_view中插入数据,原表t_students中插入数据
在这里插入图片描述
删除视图,原表中的数据不会受影响。
在这里插入图片描述
3.删除视图
语法格式:drop view 视图名;

drop view stu_view;

可以对多张表创建一个视图,此时对视图的增删改查操作会直接作用在着多张表上,简化了SQL操作,利于维护。
在这里插入图片描述

三、DBA命令

1.数据导出:
此操作只能是在windows的命令行窗口中执行。
(1)导出数据库
语法格式:mysqldump 数据库名 > 文件名 -uroot -p密码;

mysqlduump stu>D:\stu.sql -uroot -p12345678;

(2)导出数据库中的表
语法格式:mysqldump 数据库名 表名 > 文件名 -uroot -p密码;

mysqlduump stu course>D:\course.sql -uroot -p12345678;

在这里插入图片描述
可以使用记事本点击查看内容.
在这里插入图片描述
2.数据导入
只能导入后缀名是.sql的SQL文件。
语法格式:source 文件名;

source D:\stu.sql;

注意执行顺序:
首先要登录到MySQL数据库服务器上:mysql -uroot -pmysql -uroot -p密码
然后创建数据库:create database 数据库名;
再使用数据库:use 数据库名;
最后导入:source 文件名;
在这里插入图片描述
DBA常用命令

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智商三岁半i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值