索引、数据库备份、视图的学习

索引

概念:
索引是由数据库表中一列或多列组合而成,其作用是提高对表中数据的查询速度。
类似于图书的目录,方便快速定位,寻找指定的内容。

索引通常分为5类,常用的是前三类:普通全文组合

注意,索引也是有缺点的:
优点:提高查询数据的速度。
缺点:创建和维护索引的时间增多了,还占用硬盘空间。

创建:
在已存在的表上创建索引:
CREATE INDEX 索引名 ON 表名(列段);
.
通过 SQL 语句 ALTER TABLE 创建索引:
ALTER TABLE 表名 ADD 索引名 (列段);
.
删除:
GROUP INDEX 索引名 ON 表名;

普通索引

是最基本的索引,它没有任何限制;
当执行创建索引之前的查询代码,费时:0.089s
在这里插入图片描述
而执行了创建索引之后的查询代码,费时:0.031s
在这里插入图片描述

全文索引

提高查询较大字符串类型的速度;只有MyISAM引擎支持该索引,MySQL默认引擎不支持;

使用全文索引前:
结果:费时0.249s、57条记录。
在这里插入图片描述
使用全文索引后:
结果:费时0.049s、26条记录。
在这里插入图片描述
这里可能大家就有疑问了,“为什么相同的搜索关键词、相同的表,得到的结果却不同?”。
其实,费时不同很好理解,用了全文索引,数据的查询效率有所提升才是正确的;但条数不同是因为MySQL的全文索引索引规则不等同于OR关键字。即:MySQL全文索引 != OR

还有需要注意的是,MySQL的全文索引和现在流行的索引框架的索引规则也是不同的,也就是查询到的结果还是会不同。

组合索引

概念:
普通(单列)索引:即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。

组合索引:即一个索引包含多个列。

组合索引遵循左侧原则,也是就是说一个查询可以只使用复合索引最左侧的一部份,
例如索引是key index (a,b,c). 可以支持a | a,b | a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。

创建组合索引之前:
在这里插入图片描述
创建组合索引之后:
在这里插入图片描述
可能是数据量少的问题?有提升,提升感觉不是很明显。

主键索引

是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;

唯一索引

与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一;

数据库备份

大家可能会说,在图形化界面直接右键复制、导出等操作不是更好用吗?
其实不然,因为你图形化界面程序的版本不同,有时候也是会导出失败的,而且花费的时间也远远超出命令行的方法。

导出整个数据库的结构:
mysqldump -h localhost -uroot -p123456 database > dump.sql
在这里插入图片描述

导出整个数据库的数据:
mysqldump -h localhost -uroot -p123456 db_xiaoli > d:/t_log_001.sql
在这里插入图片描述

导出单个数据表结构和数据:

例1、mysqldump -h localhost -uroot -p123456 database table > dump.sql
例2、mysqldump -h localhost -uroot -p123456 db_xiaoli t_log > d:/t_log_002.sql
例3、mysqldump -h localhost -uroot -p123456 db_xiaoli t_log > t_log_003.sql

例1是导出单个数据表结构,导出的文件存储在执行这条命令的地址下;
例2、3都是导出同一张表的数据,不同的是例2指定了导出文件存储的位置,而例3没有指定,那么例3导出的文件就保存在执行这条命令的地址下。

视图

概念:虚拟表,和普通表一样使用。

有助理解:

创建语法的关键字是否实际占用物理空间使用
视图create view只是保存了sql逻辑增删改查,只是一般不能增删改
create table保存了数据增删改查

语法:

create view 视图名
as
查询语句;

使用:

select * from 视图名 where 筛选条件;

案例:
查询姓名中包含a字符的员工名、部门名和工种信息
这种就先创建视图:

CREATE VIEW myv1 
AS 
SELECT
	last_name,
	department_name,
	job_title
FROM
	employees e
	JOIN departments d ON e.department_id = d.department_id
	JOIN jobs j ON j.job_id = e.job_id;

然后就是使用:

SELECT * FROM myv1 WHERE last_name LIKE '%a%';

员工名、部门名和工种三个需要查询的,为什么在使用视图的最后只用员工名模糊查询a就行了,因为三表已经连接了,使用其中一个条件就等价了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值