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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: MySQL视图、索引、备份与恢复、执行计划

一、前言

1.导读

这篇博客围绕的是视图、索引、导入导出、执行计划来展开的,相信学过数据库的同志们,对这些词汇都略有耳闻,那么这些词汇的意思是什么?实际的用途是什么?大多数人可能没有过多的去了解,其实以上技术都为了一个东西而产生——调优,也就是指对MySQL数据库进行优化以提升其性能和效率的过程。下面就由我来带领和大家走进MySQL视图、索引、导入导出、执行计划的技术分享。

2.学习的好处

刚刚说到了,这些技术的产生都是为了调优,那么主要突出在那些方面呢?

我列举了以下几点:

 

      1.提升查询性能:通过调优数据库参数、优化查询语句、设计合适的索引等方式,可以提升查询的执行速度和效率,减少查询的响应时间,提高用户体验。

      2.提高系统的吞吐量:通过调整数据库的缓冲区大小、优化磁盘访问方式、合理利用CPU和内存等资源,可以提高系统的吞吐量,支持更高的并发访问量,提升系统的处理能力。

      3.减少资源消耗:调优可避免低效查询的出现,减少不必要的资源消耗,如CPU、内存、磁盘等,提高数据库服务器的利用率,降低硬件成本。

       4.加强安全性通过优化数据库的配置和权限设置,可以加强数据库的安全性,防止未授权的访问、SQL注入等安全风险。

      5.优化备份和恢复:优化存储引擎、设计合理的备份策略和恢复机制,可以提升备份和恢复的速度和效率,降低备份对系统性能的影响。

      6.降低维护成本:数据库调优可以提高数据库的稳定性和可靠性,减少故障发生的频率和影响范围,降低维护和故障排除的成本。

总结而言,MySQL调优可以帮助提升数据库性能和效率,提高系统吞吐量,减少资源消耗,加强安全性,优化备份和恢复过程,降低维护成本,从而提供更好的用户体验和系统可用性。

二、视图

1.什么是视图

在数据库中,视图(View)是一个虚拟的表,它基于一个或多个数据库表的查询结果而生成。与实际的数据库表类似,视图具有字段和行,并且可以像表一样被查询、过滤和操作。但与表不同的是,视图并不存储数据,它是从其他表中取得数据的一种方式。

以下是关于数据库中视图的一些重要概念和特点:

       

       1.定义:视图是一种逻辑上的表,它由一个查询语句定义,该查询语句可以包含更复杂的逻辑,如表连接、聚合函数、子查询等。

      2.数据独立性:通过使用视图,可以隐藏底层表的结构细节,使应用程序只需关注视图的结构,而不必了解表的具体信息。这种数据独立性使得在不影响应用程序的情况下修改底层表结构成为可能。

      3.数据安全性:通过视图,可以限制用户对数据的访问权限。只向用户公开了需要的部分数据。例如,视图可以将敏感数据过滤掉,只返回符合特定条件的数据。

      4.查询简化:视图可以将复杂的查询逻辑封装为一个简单的视图,使应用程序可以以简洁的方式使用汇总、过滤、联接等复杂查询结果。

       5.更新性:在某些情况下,视图可以进行更新操作。这取决于视图的定义和底层表的约束条件。一些视图可以进行直接的插入、更新和删除操作,而其他视图只能用于查询。

小贴士:

视图的使用场景

假设有一个电子商务平台,其中包含以下两个表:

  1. 用户表(users):
  • user_id(用户ID)
  • username(用户名)
  • email(电子邮件)
  • password(密码)
  1. 商品表(products):
  • product_id(商品ID)
  • product_name(商品名称)
  • price(价格)
  • description(描述)
  • user_id(卖家用户ID)

现在,我们可以使用视图来演示这些重要概念和特点。

     

1.数据独立性:创建一个名为"商品列表"(product_list)的视图,通过连接用户表和商品表来检索商品信息。视图的定义如下:

CREATE VIEW product_list AS
  SELECT p.product_id, p.product_name, p.price, p.description, u.username
  FROM products p
  INNER JOIN users u ON p.user_id = u.user_id;

通过这个视图,应用程序可以直接查询"product_list"视图,而无需了解底层的表结构。

     

2.数据安全性:创建一个名为"用户商品列表"(user_product_list)的视图,仅包含某个特定用户的商品清单。视图的定义如下:

CREATE VIEW user_product_list AS
  SELECT p.product_id, p.product_name, p.price, p.description
  FROM products p
  INNER JOIN users u ON p.user_id = u.user_id
  WHERE u.username = 'specific_user';

通过这个视图,只有特定用户可以查询到自己所发布的商品信息,其他用户无法访问到该视图,也可防止失误导致删除表的操作(权限不够的人只给ta视图进行查询操作)。

     

3.查询简化:创建一个名为"热门商品"(popular_products)的视图,显示价格高于特定

阈值的商品清单。视图的定义如下:

CREATE VIEW user_product_list AS
  SELECT p.product_id, p.product_name, p.price, p.description
  FROM products p
  INNER JOIN users u ON p.user_id = u.user_id
  WHERE u.username = 'specific_user';

这个视图使应用程序能够直接查询"popular_products"视图,而无需编写复杂的过滤条件。只需在视图的后面追加自己所需的where条件即可。

   

       

4.更新性:在某些情况下,可以对视图进行数据库操作。例如,可以创建一个允许用户更新个人商品信息的视图。

CREATE VIEW my_products AS
 SELECT product_id, product_name, price, description
 FROM products
 WHERE user_id = 'current_user';

这个视图可以让用户直接在视图中更新自己所发布的商品信息,而无需直接操作底层的表。

2.视图与数据表的区别

  • 视图不是数据库中真实的表,而是一张虚拟表,其结构和数据是建立在对数据中真实表的查询基础上的。
  • 存储在数据库中的查询操作 SQL 语句定义了视图的内容,列数据和行数据来自于视图查询所引用的实际表,引用视图时动态生成这些数据。
  • 视图没有实际的物理记录,不是以数据集的形式存储在数据库中的,它所对应的数据实际上是存储在视图所引用的真实表中的。
  • 视图是数据的窗口,而表是内容。表是实际数据的存放单位,而视图只是以不同的显示方式展示数据,其数据来源还是实际表。
  • 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些 SQL 语句的集合。从安全的角度来看,视图的数据安全性更高,使用视图的用户不接触数据表,不知道表结构。
  • 视图的建立和删除只影响视图本身,不影响对应的基本表。

3.使用视图的优点

1.定制用户数据,聚焦特定的数据

在实际的应用过程中,不同的用户可能对不同的数据有不同的要求。

例如,当数据库同时存在时,如学生基本信息表、课程表和教师信息表等多种表同时存在时,可以根据需求让不同的用户使用各自的数据。学生查看修改自己基本信息的视图,安排课程人员查看修改课程表和教师信息的视图,教师查看学生信息和课程信息表的视图。

2.简化数据操作

在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需要关联到其他表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简化操作。

3. 提高数据的安全性

视图是虚拟的,物理上是不存在的。可以只授予用户视图的权限,而不具体指定使用表的权限,来保护基础数据的安全。

4. 共享所需数据

通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。

5. 更改数据格式

通过使用视图,可以重新格式化检索出的数据,并组织输出到其他应用程序中。

6.重用 SQL 语句

视图提供的是对查询操作的封装,本身不包含数据,所呈现的数据是根据视图定义从基础表中检索出来的,如果基础表的数据新增或删除,视图呈现的也是更新后的数据。视图定义后,编写完所需的查询,可以方便地重用该视图。

视图优点在上面也提到几个就不过多赘述了,大家看看就好!!

4.视图的语法

1.创建视图(CREATE VIEW)

在数据库中创建视图可以基于一个或多个表进行查询,并将查询结果作为视图的定义。语法如下:

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

创建视图时,你可以指定视图的名称(view_name),定义视图所包含的列以及查询的条件。

小贴士:

如果出现以上错误说明视图中有两个列字段相同,需要去重。

2.查询视图数据

一旦视图创建完成,可以像查询表一样查询视图,使用SELECT语句获取视图中的数据。例如:

SELECT * FROM view_name;

注意,查询视图时可以像查询表一样使用WHERE子句进行过滤操作。

3.更新视图数据

视图的可更新性取决于视图的定义和底层表的约束条件。在某些情况下,你可以对视图进行UPDATE、INSERT和DELETE操作,以更新底层表中的数据。例如:

UPDATE view_name SET column1 = value1 WHERE condition;
INSERT INTO view_name (column1, column2, ...) VALUES (value1, value2, ...);
DELETE FROM view_name WHERE condition;

注意,进行视图更新时,需要确保视图的定义满足各种约束条件。


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
存储 关系型数据库 MySQL
Mysql索引总结(1)
Mysql索引总结(1)
|
18天前
|
关系型数据库 MySQL 索引
mysql 分析5语句的优化--索引添加删除
mysql 分析5语句的优化--索引添加删除
14 0
|
2天前
|
SQL 关系型数据库 MySQL
MySQL8.0索引新特性
MySQL8.0索引新特性
|
2天前
|
存储 SQL 关系型数据库
MySQL 索引
MySQL 索引
11 0
|
15天前
|
存储 关系型数据库 MySQL
【MySQL实战笔记】 04 | 深入浅出索引(上)-02
【4月更文挑战第9天】InnoDB数据库使用B+树作为索引模型,其中主键索引的叶子节点存储完整行数据,非主键索引则存储主键值。主键查询只需搜索一棵树,而非主键查询需两次搜索,因此推荐使用主键查询以提高效率。在插入新值时,B+树需要维护有序性,可能导致数据页分裂影响性能。自增主键在插入时可避免数据挪动和页分裂,且占用存储空间小,通常更为理想。然而,如果场景仅需唯一索引,可直接设为主键以减少查询步骤。
16 1
【MySQL实战笔记】 04 | 深入浅出索引(上)-02
|
17天前
|
关系型数据库 MySQL 数据库
6. 了解过Mysql的索引嘛 ?
了解MySQL的索引类型,包括单列索引(普通、唯一、主键和全文索引)和组合索引。单列索引用于一列,如普通索引允许重复值,唯一索引和主键索引不允许,后者不允许空值。全文索引适用于特定文本字段。组合索引是多列的,遵循左前缀原则,通常推荐用于提高查询效率,除非是主键。
16 0
|
18天前
|
SQL 存储 关系型数据库
mysql数据库备份与恢复
mysql数据库备份与恢复
|
4天前
|
SQL 存储 关系型数据库
MySQL Cluster集群安装及使用
MySQL Cluster集群安装及使用
|
19天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)
|
8天前
|
关系型数据库 MySQL 数据库
《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
35 4