Mysql之视图,索引

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql之视图,索引

1.视图是什么?

  1. 视图是一种虚拟的表,是从数据库中一个或多个表中导出来的表。
  2. 数据库中存放了视图的定义,而并没有存放视图中的数据,这些数据存放在原来的表中。
  3. 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。

1.1.视图的语法

CREATE VIEW <视图名> AS <SELECT语句>

 

2.视图的重要性?

  • 定制用户数据,聚焦特定的数据在实际的应用过程中,不同的用户可能对不同的数据有不同的要求。
    例如,当数据库同时存在时,如学生基本信息表、课程表和教师信息表等多种表同时存在时,可以根据需求让不同的用户使用各自的数据。学生查看修改自己基本信息的视图,安排课程人员查看修改课程表和教师信息的视图,教师查看学生信息和课程信息表的视图。
  • 使操作简便化。在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需要关联到其他表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简化操作。(通过筛选,组合从而以不同的角度呈现数据,方便用户进行数据管理和分析。比如:多表查询时,我们只需要看几个字段)
  • 增加数据的安全性。视图是虚拟的,物理上是不存在的。可以只授予用户视图的权限,而不具体指定使用表的权限,来保护基础数据的安全。(我们使用视图去修改,删除数据并不会改变原数据库中的数据)
  • 共享所需数据
    通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。(比如:政府部门之间的官员任免,这时政府中会共用一张用户表。
  • 更改数据格式
    通过使用视图,可以重新格式化检索出的数据,并组织输出到其他应用程序中。(比如我们在数据库中存储的时间日期是字符串,要想比较就得转换成data类型的)
  • 重用 SQL 语句
    视图提供的是对查询操作的封装,本身不包含数据,所呈现的数据是根据视图定义从基础表中检索出来的,如果基础表的数据新增或删除,视图呈现的也是更新后的数据。视图定义后,编写完所需的查询,可以方便地重用该视图。
  • 总的来说,视图提供了一种简化、安全、抽象的数据访问方式,可以提高数据访问的效率、数据安全性和应用程序的灵活性。通过使用视图,可以将复杂的查询逻辑隐藏起来,简化数据操作,提高代码复用性,并降低维护成本。

3.什么时候该使用视图(常见使用场景)

1. 数据权限控制:

  ✌️示例:在一个企业内部的人力资源系统中,有一个包含所有员工信息的表。根据不同的用户角色和权限,可以创建不同的视图,限制用户只能看到他们负责的部门或团队的员工信息,而无法访问其他部门的数据。这样可以有效控制数据的访问权限,提高数据的安全性

2. 数据报表和分析:

  ✌️示例:在一个销售管理系统中,有一个包含订单信息的表。可以创建一个视图,对订单数据进行筛选、分组、计算等操作,生成各种类型的报表,如销售额统计、客户购买趋势分析等。这样,用户可以通过简单的查询视图来获取需要的报表数据,而无需编写复杂的查询语句

3. 数据整合和补充:

  ✌️示例:在一个电商平台中,有多个数据库表存储了产品信息、库存信息和销售信息。可以创建一个视图,将这些表联接起来,以提供更全面的产品信息。例如,可以创建一个视图,包含产品名称、价格、库存量和销售数量等信息,方便用户查看产品的完整信息

4. 数据规范化和简化:

✌️示例:在一个多表关联的数据库中,有一些常用的查询操作需要经常被使用,可以为这些查询操作创建视图,以简化查询语句并提高可读性。例如,可以创建一个视图,将多个表关联起来,并根据特定条件筛选出符合条件的数据,使得查询时只需使用简单的视图查询语句来获取所需结果

👀👀视图的使用场景是多样的,可以根据具体的数据需求和应用要求进行灵活的定义和使用,以提高数据操作的效率和易用性

4 .索引是什么

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

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

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

 

5.索引的重要性?

优点:

提高查询数据的速度。(当我们使用数据库查询某个关键字时,我们的查询效率会比没有使用索引的要快)这是使用索引最主要的原因。

通过创建唯一索引可以保证数据库表中每一行数据的唯一性。()

可以给所有的 MySQL 列类型设置索引。

在实现数据的参考完整性方面可以加速表与表之间的连接。

在使用分组和排序子句进行数据查询时也可以显著减少查询中分组和排序的时间

缺点:

当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,这样就降低了数据的维护速度。

创建和维护索引的时间增加了,同时占用硬盘空间。(公司在提示性能和升级磁盘之间会选择前者)

6.索引在什么情况下会失效

1. 不使用索引列进行查询:索引只能在使用 索引列(索引的最左列或最左前缀)作为查询条件时才能起作用。如果查询中没有使用索引列,那么索引将无法生效,数据库将会执行全表扫描 2. 对索引列进行了函数操作:对索引列进行 函数操作(如函数、运算符、类型转换等)会导致索引失效,因为函数操作可能会改变列的值,使得索引无法直接匹配查询条件 3. 使用了索引列的部分进行范围查询:一般情况下,当使用索引列进行范围查询(如`>`、`<`、`BETWEEN`等)时,索引仍然可以起作用。但如果在范围查询中使用了索引列的部分进行了运算或函数操作,将导致索引失效 4. 数据表过小:如果数据表的大小非常小,如只有几行数据,数据库通常会选择忽略索引,并直接进行全表扫描来获取数据,因为通 过索引的查找开销可能会大于直接全表扫描的开销 5. 索引选择性太低:选择性是 指索引列不同取值的唯一性程度。如果索引列的选择性非常低,即索引列的取值重复较多,那么索引的效果将降低,数据库可能会选择放弃使用索引而进行全表扫描 6. 统计信息不准确:数据库依赖于统计信息来估计查询成本,选择执行计划。如果统计信息不准确或过时,可能会导致数据库做出错误的执行计划选择,使得索引失效 7. 数据页分散程度高:如果索引的数据页分散程度高,即索引中的数据在物理上存储非常分散,需要进行大量的磁盘IO操作来获取索引数据,可能会导致索引效率低下 8.like以通配符%开头索引失效

7.索引的类别

1. 唯一索引(Unique Index):

保证索引列的唯一性,即索引列的值在整个表中是唯一的

语法:

CREATE UNIQUE INDEX index_name ON table_name (column1, column2, ...);

2. 主键索引(Primary Key Index):

用于定义表的主键,确保索引列的唯一性,并且不允许为空

语法:

CREATE TABLE table_name (
       column1 datatype PRIMARY KEY,
       column2 datatype,
       ...
   );

或者:

ALTER TABLE table_name ADD PRIMARY KEY (column1);

3. 聚集索引(Clustered Index):

物理上将数据行按照索引的顺序进行存储,并且一个表只能有一个聚集索引。在大部分数据库管理系统中,主键索引默认就是聚集索引

创建主键索引时,聚集索引将会被自动创建

4. 非聚集索引(Non-clustered Index):

在单独的数据区域存储索引的数据,并在叶子节点上保存指向实际数据行的引用。一个表可以有多个非聚集索引

语法:

CREATE INDEX index_name ON table_name (column1, column2, ...);

5. 全文索引(Full-text Index)

用于全文搜索,可以在文本数据(如文章、描述等)中快速找到匹配的词语或短语

语法:  

 

CREATE TABLE table_name (
       column1 datatype,
       column2 datatype,
       ...
       FULLTEXT (column1, column2, ...)
   );

或者:

ALTER TABLE table_name ADD FULLTEXT (column1, column2, ...);

6. 复合索引(Composite Index):

由多个列组合而成的索引,可以对多个列进行查询和排序,提高多列条件查询的性能

语法:

CREATE INDEX index_name ON table_name (column1, column2, ...);

8.索引的类型

1. B-树索引(B-Tree Index)

是最常见的索引类型,在MySQL中被广泛使用。B-树索引适用于等值查询、范围查询和排序,它采用平衡树的数据结构,可以高效地支持数据的快速查找

2. 哈希索引(Hash Index):

基于哈希表实现的索引,适用于等值查询,对于范围查询和排序性能较差。哈希索引将数据存储为哈希值和链表的形式,可以在O(1)的时间复杂度内找到指定的值

3. 有序索引(Ordered Index):

在某些存储引擎中,也可以称为聚集索引(Clustered Index)。有序索引是按照数据行的逻辑顺序存储数据的索引,通常与数据行存储在一起,因此可以加快范围查询和排序的性能

4. 全文索引(Full-text Index):

用于全文搜索,在MySQL中可以使用全文索引进行对文本数据的高效搜索,支持关键字查询、短语匹配和布尔运算等

5. 空间索引(Spatial Index):

用于处理空间数据类型(如地理信息、坐标等)的索引,提供高效的空间查询和分析功能

6. 前缀索引(Prefix Index):

对索引列的前缀进行索引,适用于长字符串类型的列或者大文本字段,可以减少索引的存储空间和提高查询性能

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
22天前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
1月前
|
存储 NoSQL 关系型数据库
为什么MySQL不使用红黑树做索引
本文详细探讨了MySQL索引机制,解释了为何添加索引能提升查询效率。索引如同数据库的“目录”,在数据量庞大时提高查询速度。文中介绍了常见索引数据结构:哈希表、有序数组和搜索树(包括二叉树、平衡二叉树、红黑树、B-树和B+树)。重点分析了B+树在MyISAM和InnoDB引擎中的应用,并讨论了聚簇索引、非聚簇索引、联合索引及最左前缀原则。最后,还介绍了LSM-Tree在高频写入场景下的优势。通过对比多种数据结构,帮助理解不同场景下的索引选择。
69 6
|
1月前
|
SQL 关系型数据库 MySQL
案例剖析:MySQL唯一索引并发插入导致死锁!
案例剖析:MySQL唯一索引并发插入导致死锁!
案例剖析:MySQL唯一索引并发插入导致死锁!
|
30天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
60 3
Mysql(4)—数据库索引
|
24天前
|
存储 关系型数据库 MySQL
如何在MySQL中进行索引的创建和管理?
【10月更文挑战第16天】如何在MySQL中进行索引的创建和管理?
49 1
|
13天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
69 1
|
14天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
45 0
|
14天前
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(8)作者——LJS[含MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;注意点及常见报错问题所对应的解决方法]
MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;举例说明注意点及常见报错问题所对应的解决方法
|
1月前
|
监控 关系型数据库 MySQL
MySQL数据表索引命名规范
MySQL数据表索引命名规范
56 1
|
1月前
|
存储 SQL 关系型数据库
mysql中主键索引和联合索引的原理与区别
本文详细介绍了MySQL中的主键索引和联合索引原理及其区别。主键索引按主键值排序,叶节点仅存储数据区,而索引页则存储索引和指向数据域的指针。联合索引由多个字段组成,遵循最左前缀原则,可提高查询效率。文章还探讨了索引扫描原理、索引失效情况及设计原则,并对比了InnoDB与MyISAM存储引擎中聚簇索引和非聚簇索引的特点。对于优化MySQL性能具有参考价值。