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

相关文章

mysql索引四(组合索引)

单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;组合索引,即一个索引包含多个列。 因为有事,下面内容全部转自:https://www.cnblogs.com/farmer-cabbage/p/5793589.html 为了形象地对比单列索引和组合索引,为表添加多个字段:    CREATE TABLE mytable( ID INT NOT NULL, use

mysql索引三(全文索引)

前面分别介绍了mysql索引一(普通索引)、mysql索引二(唯一索引)。 本文学习mysql全文索引。 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。 在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(

mysql索引二(唯一索引)

前文中介绍了MySQL中普通索引用法,和没有索引的区别。mysql索引一(普通索引) 下面学习一下唯一索引。 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE,把它定义为一个唯一索引。 添加数据库唯一索引的几种

mysql索引一(普通索引)

mysql的索引分为两大类,聚簇索引、非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引则不同。聚簇索引能够提高多行检索的速度、非聚簇索引则对单行检索的速度很快。         在这两大类的索引类型下,还可以降索引分为4个小类型:         1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。         2,唯一索引:与普通索引

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

数据库期末复习知识点

A卷 1. 选择题(30') 2. 判断范式(10') 判断到第三范式 3. 程序填空(20') 4. 分析填空(15') 5. 写SQL(25') 5'一题 恶性 B卷 1. 单选(30') 2. 填空 (20') 3. 程序填空(20') 4. 写SQL(30') 知识点 第一章 数据库管理系统(DBMS)  主要功能 数据定义功能 (DDL, 数据定义语

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

给数据库的表添加字段

周五有一个需求是这样的: 原来数据库有一个表B,现在需要添加一个字段C,我把代码中增删改查部分进行了修改, 比如insert中也添入了字段C。 但没有考虑到一个问题,数据库的兼容性。因为之前的版本已经投入使用了,再升级的话,需要进行兼容处理,当时脑子都蒙了,转不过来,后来同事解决了这个问题。 现在想想,思路就是,把数据库的表结构存入文件中,如xxx.sql 实时更新该文件: CREAT

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

SQL Server中,always on服务器的相关操作

在SQL Server中,建立了always on服务,可用于数据库的同步备份,当数据库出现问题后,always on服务会自动切换主从服务器。 例如192.168.1.10为主服务器,12为从服务器,当主服务器出现问题后,always on自动将主服务器切换为12,保证数据库正常访问。 对于always on服务器有如下操作: 1、切换主从服务器:假如需要手动切换主从服务器时(如果两个服务