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+树。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哪个牌子充电宝好?好用充电宝排行榜!精选充电宝排行榜

在如今这个科技飞速发展的时代&#xff0c;充电宝已然成为我们日常生活中不可或缺的伴侣。无论是出差旅行&#xff0c;还是日常通勤&#xff0c;我们都离不开它为我们的电子设备保驾护航。然而&#xff0c;面对市场上琳琅满目的充电宝品牌&#xff0c;您是否感到眼花缭乱&#…

ONLYOFFICE 桌面编辑器 8.1 强势来袭:解锁全新PDF编辑、幻灯片优化与本地化体验,立即下载!

目录 一、轻松编辑PDF文件 1.1 编辑文本 1.2 添加、旋转和删除页面 1.3 插入和修改对象 1.4 添加注释和标注 1.5 切换编辑或查看模式 1.6 创建和填写表单 二、用幻灯片版式快速修改幻灯片 2.1 选择或创建幻灯片版式 2.2 应用幻灯片版式 2.3 修改幻灯片版式 2.4 使用…

[经验] candy是什么意思英语翻译 #笔记#其他#职场发展

candy是什么意思英语翻译 1、candy的意思 Candy是英语中的一个词汇&#xff0c;意思是糖果、糖果制品。Candy意为果脯的意思也不是很常见。 糖果是一种富含糖分的食品&#xff0c;主要由砂糖、粘合剂和食用色素等组成。糖果的种类可以很多&#xff0c;有硬糖、软糖、巧克力、…

基于YOLOv8m的水族馆动物识别(附数据集和Coovally操作步骤)

本文主要内容:详细介绍了水族馆动物识别的整个过程&#xff0c;从创建数据集到训练模型再到预测结果全部可视化操作与分析。 文末有数据集获取方式&#xff0c;请先看检测效果 现状 随着水族馆行业的快速发展&#xff0c;对动物识别的需求日益增加。水族馆需要准确识别动物种…

【ARM】PK51如何将BL51链接器切换成LX51链接器

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决客户在使用PK51进行项目研发的时候&#xff0c;想要使用LX51链接器进行使用。 2、 问题场景 客户在使用51芯片进行开发的时候&#xff0c;发现工程中使用的是BL51链接器&#xff0c;而不是LX51链接器&#xff…

selenium前期准备

1. 驱动地址&#xff1a; a. chromedriver:https://googlechromelabs.github.io/chrome-for-testing/ b. https://registry.npmmirror.com/binary.html?pathchromedriver/ 下载好的驱动一般放在Python初始文件夹下&#xff0c;例如&#xff1a;D:\Python3.8 2. selenium原理…

基于SSM+Jsp的校园餐厅管理

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

OpenAI CTO米拉·穆拉提谈未来:AI一年半后达到博士水平

人工智能&#xff08;AI&#xff09;领域近年来的发展迅猛&#xff0c;特别是在大语言模型&#xff08;LLM&#xff09;的进步上。最近&#xff0c;OpenAI的首席技术官&#xff08;CTO&#xff09;米拉穆拉提&#xff08;Mira Murati&#xff09;在达特茅斯学院的一次采访中&am…

Java智慧工地源码 5G智慧工地系统源码 使用SAAS部署 三维可视化管理,与一线生产过程相融合,集成数据后台,统一前端入口,呈现多方项目信息;

Java智慧工地源码 5G智慧工地系统源码 使用SAAS部署 三维可视化管理&#xff0c;与一线生产过程相融合&#xff0c;集成数据后台&#xff0c;统一前端入口&#xff0c;呈现多方项目信息; 智慧工地是指运用信息化手段&#xff0c;通过三维设计平台对工程项目进行精确设计和施工…

SpringBoot-注解@PropertiySource读取外部属性文件

ConfigurationProperties和Value两个注解能从配置文件中获取数据&#xff0c;但是前面讲了他们是从全局配置文件中获取&#xff0c;且只能从全局配置文件中获取&#xff0c;那么如果是一些数值类的数据放在全局配置文件里&#xff0c;是不怎么合适的&#xff0c;我们往往会把他…

WPF 深入理解六、ControlTemplate控件模板

ControlTemplate 定义 控件模板用于来定义控件的外观、样式&#xff0c;还可通过控件模板的触发器(ControlTemplate.Triggers)修改控件的行为、响应动画等。 对与WPF当中,每个控件都是无外观的,这意味着我们可以完全自定义其可视元素的外观,但是不能修改其内部的行为&#xf…

Vue3.3 的 defineOptions 的使用,方便在 setup 语法糖中为组件命名和控制父子属性透传,包含在线运行实例欧

defineOptions 是 Vue3.3 的新的宏&#xff0c;可以通过 defineOptions 宏在 <script setup> 中使用选项式 API&#xff0c;也就是说可以在一个宏函数中设置 name, props, emits, render, 控制是否允许父子非 props 的属性透传等功能。 defineOptions 可以直接在 setup …

读AI新生:破解人机共存密码笔记10人类角色

1. 工作 1.1. 技术性失业问题 1.1.1. 约翰梅纳德凯恩斯&#xff08;John Maynard Keynes&#xff09;在其著名的文章《我们后代在经济上的可能前景》中提出了技术性失业问题 1.1.1.1. 他在1930年写了这篇文章&#xff0c;当时大萧条在英国造成了大规模失业 1.1.2. 那些反对…

驾照减分考试搜题软件?分享四个可以搜答案的软件 #其他#笔记#经验分享

大学生们可以通过使用搜题软件&#xff0c;快速找到自己遇到的问题的答案&#xff0c;提高学习效率&#xff0c;以下分享各类型的供大家学习。 1.彩虹搜题 这是个微信公众号 学生或者是成年人使用非常广的一款学习应用软件&#xff0c;里面包含了各行各业的海量题库&#xf…

FLASH仿真EEPROM---基于智芯Z20K11XM

一、介绍 电可擦和可编程只读存储器(EEPROM)可以对字节或字编程和擦除。EEPROM中的数据即使断电也能保持&#xff0c;但Z20K1xx芯片不含EEPROM。然而&#xff0c;闪存可以通过EEPROM仿真软件来模拟EEPROM。Z20K1xx包含两个flash阵列。编程和擦除操作可以在一个数组上进行&#…

AIGC发展方向和前景

引言 背景介绍 AIGC的定义及其发展历程 AIGC&#xff0c;即人工智能生成内容&#xff0c;是近年来在人工智能领域兴起的一项重要技术。它通过使用机器学习和深度学习等技术&#xff0c;使得计算机能够自动生成各种形式的数字内容&#xff0c;如文本、图像、音频和视频等。 …

【UIDynamic-动力学-UIAttachmentBehavior-附着行为-弹性附着 Objective-C语言】

一、弹性附着啊,我们来看一下, 1.刚才我们说了刚性附着,弹性附着,怎么着做啊,实际上,只需要多添加两个属性,就可以了, 实际上,添加一个,也可以啊, 我们把这个length,先注释掉, 先注释掉,self.attach.length = 100;这句话, 固定的长度啊,给它注释掉, 然后呢…

vue3中h函数的使用

h函数是用于创建一个 vnodes &#xff0c;它既可以用于创建原生元素&#xff0c;也可以创建组件&#xff0c;其渲染后的效果等同于使用模版语言来进行创建。 h函数的传参如下&#xff1a; // 完整参数签名 function h(type: string | Component,props?: object | null,child…

Docker配置国内镜像加速-2

Docker 官方镜像仓库&#xff08;如 Docker Hub&#xff09;可能由于网络原因&#xff0c;在某些地区或网络环境下下载速度较慢。使用镜像加速可以从距离用户更近、网络条件更好的镜像服务器获取镜像&#xff0c;从而显著提高下载速度&#xff0c;节省时间。 1.测试是否安装 d…

探索Elastic Search:强大的开源搜索引擎,详解及使用

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 全文搜索属于最常见的需求&#xff0c;开源的 Elasticsearch &#xff08;以下简称 Elastic&#xff09;是目前全文搜索引…