MySQL视图、索引、备份与恢复、执行计划(二)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: MySQL视图、索引、备份与恢复、执行计划(二)

4.修改视图定义(ALTER VIEW)

你可以使用ALTER VIEW语句来修改已存在的视图定义。例如:

ALTER VIEW view_name AS
SELECT column1, column2, ...
FROM table1
WHERE condition;

通过修改视图定义,可以重新定义视图的查询逻辑、添加新的列或更改查询条件。

5.删除视图(DROP VIEW)

如果不再需要某个视图,可以使用DROP VIEW语句将其从数据库中删除。例如:

DROP VIEW view_name;

请谨慎删除视图,因为一旦删除,视图的定义和数据将无法恢复。

三、索引

1.什么是索引

索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列。否则,数据库系统将读取每条记录的所有信息进行匹配。

可以把索引比作新华字典的音序表。例如,要查“库”字,如果不使用音序,就需要从字典的 400 页中逐页来找。但是,如果提取拼音出来,构成音序表,就只需要从 10 多页的音序表中直接查找。这样就可以大大节省时间。

因此,使用索引可以很大程度上提高数据库的查询速度还有效的提高了数据库系统的性能。

2.为什么要使用索引

索引就是根据表中的一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表,实质上是一张描述索引列的列值与原表中记录行之间一 一对应关系的有序表。

索引是 MySQL 中十分重要的数据库对象,是数据库性能调优技术的基础,常用于实现数据的快速检索。

在 MySQL 中,通常有以下两种方式访问数据库表的行数据:

1.顺序访问

顺序访问是在表中实行全表扫描,从头到尾逐行遍历,直到在无序的行数据中找到符合条件的目标数据

顺序访问实现比较简单,但是当表中有大量数据的时候,效率非常低下。例如,在几千万条数据中查找少量的数据时,使用顺序访问方式将会遍历所有的数据,花费大量的时间,显然会影响数据库的处理性能。

2.索引访问

索引访问是通过遍历索引来直接访问表中记录行的方式。

使用这种方式的前提是对表建立一个索引,在列上创建了索引之后,查找数据时可以直接根据该列上的索引找到对应记录行的位置,从而快捷地查找到数据。索引存储了指定列数据值的指针,根据指定的排序顺序对这些指针排序

总而言之,不使用索引,MySQL 就必须从第一条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间就越多。如果表中查询的列有一个索引,MySQL 就能快速到达一个位置去搜索数据文件,而不必查看所有数据,这样将会节省很大一部分时间。

我这里准备了一组上万的数据现在来测试一下索引的效率。

建立索引前,查询速度0.181s

建立索引后,查询速度0.013s

相信看完对比,你也会有所震撼,为什么小小的索引效果却有这么大!!

3.索引的优缺点

索引有其明显的优势,也有其不可避免的缺点。

优点

索引的优点如下:

  • 通过创建唯一索引可以保证数据库表中每一行数据的唯一性。
  • 可以给所有的 MySQL 列类型设置索引。
  • 可以大大加快数据的查询速度,这是使用索引最主要的原因。
  • 在实现数据的参考完整性方面可以加速表与表之间的连接。
  • 在使用分组和排序子句进行数据查询时也可以显著减少查询中分组和排序的时间

缺点

增加索引也有许多不利的方面,主要如下:

  • 创建和维护索引组要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
  • 索引需要占磁盘空间,除了数据表占数据空间以外,每一个索引还要占一定的物理空间。如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
  • 当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,这样就降低了数据的维护速度。

索引可以提高查询速度,但是会影响插入记录的速度。因为,向有索引的表中插入记录时,数据库系统会按照索引进行排序,这样就降低了插入记录的速度,插入大量记录时的速度影响会更加明显。这种情况下,最好的办法是先删除表中的索引,然后插入数据,插入完成后,再创建索引。

刚刚我们在做有无索引查询效果差异的时候大家可以看到chuan创建索引的时间远远大于查询的时间,所以在非必要情况下,不要轻易创建索引。

4.何时不使用索引

索引虽好但也有不足之处,那么什么时候不该建议使用索引呢?

  • 表记录太少
  • 经常增删改的表
  • 数据重复且分布均匀的表字段,只应该为经常查询和最经常排序的数据列建立索引(如果某个数据类包含太多的重复数据,建立索引没有太大意义)
  • 频繁更新的字段不适合创建索引(会增加IO负担)
  • where条件里用不到的字段不创建索引

5.索引分类

MySQL索引分为普通索引、唯一索引、主键索引、组合索引、全文索引。索引不会包含有null值的列,索引项可以为null(唯一索引、组合索引等),但是只要列中有null值就不会被包含在索引中。

5.1.普通索引

普通索引是最基本的索引,它没有任何限制;

  • 创建索引语法:
create index index_name on table(column);
  • 修改表结构方式添加索引:
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
  • 删除索引
DROP INDEX index_name ON table

5.2.唯一索引

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

CREATE UNIQUE INDEX indexName ON table(column(length))

5.2.主键索引

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

select * from t_log where id = '07489cdafd6d4a3489884cd3c00c7b27'

利用执行计划查看

可以看到key字段下面的PRIMARY,说明使用的索引是主键(Primary Key)。

5.2.组合索引

组合索引指在多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀原则。

create index idx_userid_moduleid_url on t_log(userid,moduleid,url)

注意:组合遵循最左前缀原则。那么何为最左前缀原则?

例如我们上面的案例userid字段就是我们的最左前缀,我们要使用组合索引的时候,必须带上该字段否则组合索引无效,我们利用执行计划来测试一下。

不带最左前缀

EXPLAIN select * from t_log where moduleid = '' and url = ''

可能执行的索引并没有我们刚刚创建的索引只有普通索引,走的也是普通索引。

 

带最左前缀(多个字段)

EXPLAIN select * from t_log where userid = '' and moduleid = '' and url = ''

在多个字段的情况下,可能走的索引有普通索引和组合索引,走的是普通索引。

 

带最左前缀(只有最左前缀字段)

EXPLAIN select * from t_log where userid = ''

在只有最左前缀下可能走的是组合索引,走的也是组合索引。

5.2.全文索引

MySQL提供了全文搜索(Full-Text Search)功能以实现对文本数据进行高效的搜索和匹配。全文索引是一种特殊类型的索引,用于在文本列上进行全文搜索。

使用全文索引可以加速针对文本列的搜索操作,并支持更灵活的搜索模式,例如关键词匹配、短语搜索、布尔搜索等。

要使用全文索引功能,首先需要创建一个全文索引。为了创建全文索引,需要满足以下条件:

       1.表的存储引擎必须是MyISAM或InnoDB。在 MySQL 5.6 之后,InnoDB 存储引擎也支持全文索引。

       2.只有 CHAR、VARCHAR 和 TEXT 类型的列可以被索引。

要在一个表的列上创建全文索引,可以使用以下语句:

CREATE FULLTEXT INDEX index_name ON table_name (column_name);

一旦全文索引创建完成,可以使用全文搜索功能。以下是几个常用的全文搜索函数:

  • MATCH: 用于指定要搜索的列。
  • AGAINST: 用于指定搜索的关键词。
  • BOOLEAN MODE: 用于支持布尔搜索。

下面是一个使用全文索引进行搜索的例子:

SELECT * FROM table_name WHERE MATCH(column_name) AGAINST('keyword');

注意:全文索引在大量数据和复杂查询场景下性能可能有限。在某些情况下,可以考虑使用更专业的全文搜索引擎,如Elasticsearch和Solr。

总结来说,MySQL的全文索引是一种用于文本列的索引类型,可以提供高效的全文搜索功能。通过创建索引和使用相应的查询语句,可以实现对文本数据的灵活和高效的搜索。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
6月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库索引的数据结构?
MySQL中默认使用B+tree索引,它是一种多路平衡搜索树,具有树高较低、检索速度快的特点。所有数据存储在叶子节点,非叶子节点仅作索引,且叶子节点形成双向链表,便于区间查询。
205 4
|
5月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
434 10
|
7月前
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
505 36
|
6月前
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
158 2
|
7月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
473 5
|
7月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mydumper备份MySQL
本文介绍了使用mydumper工具进行MySQL数据库备份与恢复的操作方法。相比单线程工作的mysqldump,mydumper支持多线程,速度提升可达10倍。其功能包括事务性表快照、快速压缩、导出binlog等,并提供详细的参数说明和操作步骤。文章通过实例演示了安装mydumper、创建存储目录、全库备份、指定数据库及表备份、删除数据库以及使用myloader恢复数据的完整流程,并附带视频讲解,帮助用户更好地理解和应用该工具。
428 0
|
4月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
181 3
|
4月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
4月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
869 152

推荐镜像

更多