MySQL数据库(四):视图和索引

2024-06-24 11:52

本文主要是介绍MySQL数据库(四):视图和索引,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       在数据库管理中,视图和索引是两种关键工具,它们各自发挥独特的作用以优化数据查询和管理。视图通过简化复杂查询、提高数据安全性和提供数据抽象,帮助用户轻松访问数据。而索引则通过加速查询、确保数据唯一性以及优化排序和分组操作,显著提升数据库性能。理解和合理运用这两者,对数据库系统的高效运行至关重要。

目录

一、视图概念(面试)

二、视图的作用(面试)

三、视图的创建和使用

3.1 定义视图

3.2 查看视图

3.3 删除视图

3.3  性能问题

四、索引

4.1 引入索引的原因(面试题)

4.2 索引是什么(面试题)

4.3 索引为什么选择b+树(面试题)

4.4 测试索引

4.5 面试题


一、视图概念(面试)

      在MySQL中,视图(View)是一种虚拟表它本质上是基于一个或多个表的查询结果,并以表的形式展示出来。视图并不实际存储数据,而是存储查询语句,当你访问视图时,MySQL 会执行这条查询语句并返回结果。

二、视图的作用(面试)

  1. 简化复杂的sql操作,在编写查询后,可以方便的重用它而不必知道它的查询细节。
  2. 重复使用该sql语句。
  3. 使用表的组成部分而不是整个表。
  4. 保护数据,可以给用户授予表的特定部分的访问权限而不是整个表。
  5. 更改数据格式和表示。

视图在数据库管理和操作中有许多重要的作用:

  1. 简化复杂查询

    • 通过创建视图,可以将复杂的查询逻辑封装在视图中。用户在需要使用这些复杂查询时,只需简单地查询视图,而不需要重复编写复杂的SQL代码。
    • 例如,如果你经常需要对多个表进行联合查询,可以创建一个视图来封装这些联合查询。
  2. 提高数据安全性

    • 视图可以限制用户访问特定的数据。通过视图,你可以只展示数据表中的某些列或行,而隐藏其他部分,从而保护敏感数据。
    • 例如,你可以创建一个视图,只显示员工的名字和部门,而不包括工资信息,这样可以限制普通用户对工资信息的访问。
  3. 数据独立性

    • 视图可以屏蔽底层表结构的变化,使得应用程序代码对表结构的变更不敏感。即使底层表结构发生变化,只要视图定义不变,应用程序代码也无需修改。
    • 例如,如果你对原始表的结构进行了调整,可以通过调整视图定义来保证原有的查询语句仍然可以正常工作。
  4. 简化权限管理

    • 通过视图,你可以为用户分配更细粒度的权限。你可以授予用户对视图的访问权限,而不需要授予他们对底层表的访问权限,从而实现更精细的权限控制。
    • 例如,你可以创建一个视图,只展示特定用户权限范围内的数据,并将访问权限分配给这些用户。

三、视图的创建和使用

3.1 定义视图

定义视图建议以"_v"开头,create view 视图名 as select语句;

3.2 查看视图

  1. show tables; 默认会显示表和视图,但不能区分。
  2. show full tables; 会显示表和视图的类型

3.3 删除视图

3.3  性能问题

         因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。如果是多 个联结和过滤创建了复杂的视图或者嵌套了视图,可能会出现性能下降。即先在基本表中进行查询,然后再在里面进行二次查询。

四、索引

4.1 引入索引的原因(面试题)

         在MySQL中,索引是一种用于提高数据库查询速度的数据结构。它类似于一本书的目录,通过在表中为一个或多个列创建索引,可以大大加快数据检索的速度。就好像在图书馆查找一本书的过程。

4.2 索引是什么(面试题)

         索引是一种特殊的文件,它包含着对数据表里所有记录的引用指针。简单讲,就像一本书前面的目 录, 能加快查询速度。

  1. 索引是帮助mysql高效获取数据的数据结构
  2. 索引存储在文件系统中
  3. 索引的文件存储形式与存储引擎有关,存储引擎的数据结构是B+树

4.3 索引为什么选择b+树(面试题)

       可以考虑作为索引的数据结构有如下几种,下面介绍下不同数据结构的特点:

  1. hash表
  2. 二叉树
  3. b树
  4. b+树

       使用hash表的缺点: 1)hash存储需要将所有的数据文件添加到内存,浪费空间 2)如果是等值查询,hash很快,但实际工作中范围查找更多,而不是等值查询,所以hash就不合适 了

4.4 测试索引

         在c2024db数据库中创建表 test_index表,表只有一列,运行程序向表中插入1万条数据,都是字符串,对比不使用索引和使用索引的情况下,查询某一条记录所花费的时间。

1、创建表:

2、运行如下程序向表中插入1万条数据:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <mysql/mysql.h>int main()
{//1、创建连接句柄MYSQL mysql_con;//句柄实际是一个结构体//2、初始化连接句柄MYSQL*mysql=mysql_init(&mysql_con);if(mysql==NULL){printf("mysql init err\n");exit(1);}//3、连接数据库服务端:连接句柄、用户名字、密码、ip地址、端口、数据库名字、标志位给0,指针给NULLmysql=mysql_real_connect(mysql,"127.0.0.1","root","111111","c2024db",3306,NULL,0);if(mysql==NULL){printf("连接失败\n");exit(1);}printf("连接成功\n");//4、循环插入10000条数据char buff[128]={0};for(int i=0;i<10000;i++){sprintf(buff,"insert into testindex value( ' index-%d')",i) ;if (mysql_ query (mysql,buff)!=0){printf("插入失败\n");exit(1) ;}}//5、关闭连接mysql_close(mysql);exit(0);
}

3、 开启运行时间监测

4、查找一条数据

5、为表test_index的title列创建索引

6、执行查询语句后,查看执行时间

4.5 面试题

1、索引未命中

       在表的某一列加上索引,然后查询时用的是没加索引的那一列进行查询,这就叫索引未命中,就是查询的时候,并没有使用所加的索引。

2、是不是给所有列加上索引就可以提高效率?

       不是这样的,因为创建索引时,要给加上索引的那一列创建b+树,所以每一列都要创建b+树,虽然查询很快,但是插入数据时很麻烦,插入一行数据,全部的b+树都要添加数据。所以我们一般给查询比较多的那一列加上b+树。

至此,数据库第四节就已经介绍完毕,感谢大家的阅读,更多精彩内容见后期,下期再见!

这篇关于MySQL数据库(四):视图和索引的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090078

相关文章

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

浅谈mysql的not exists走不走索引

《浅谈mysql的notexists走不走索引》在MySQL中,​NOTEXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引,下面就来介绍一下mysql的notexists走不走索... 在mysql中,​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引。以下

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字