当前位置: 首页 > news >正文

数据库视图和索引

参考链接:

数据库的视图和索引的概念和区别_索引和视图的区别-CSDN博客

MySQL 数据库--索引(理论详解及实例演示)_数据库索引-CSDN博客

1.视图

视图是从一个或多个表中导出来的表,是一种不是一种真正存在的概念。这样,用户可以不用看到整个数据库中的数据,而之关心对自己有用的数据。

视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变。

视图是基于 SQL 语句的结果集的可视化表现。它是一个虚拟表,其内容由查询定义。视图可以包含来自一个或多个表的列,甚至可以包含常量和计算字段。

1.1创建视图

语法

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

举例

单个表

假设你有一个名为 employees 的表,包含 employee_id, name, department, 和 salary 列。你想要创建一个视图,只显示每个部门的平均工资:

CREATE VIEW department_average_salary AS
SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department;

多个表

假设我们有两个表:employeesdepartmentsemployees 表包含员工的详细信息,而 departments 表包含部门的信息。现在,我们想要创建一个视图,该视图显示每个员工的姓名、所在部门的名称以及部门的预算。

首先,这里是两个表的示例结构:

employees 表:

  • employee_id (员工ID)
  • name (姓名)
  • department_id (部门ID)
  • position (职位)

departments 表:

  • department_id (部门ID)
  • department_name (部门名称)
  • budget (预算)

我们想要创建一个视图,这个视图将包含员工的姓名、所在部门的名称以及部门的预算。以下是创建这个视图的 SQL 语句:

CREATE VIEW employee_departments AS
SELECT e.name AS employee_name, d.department_name, d.budget
FROM employees e
JOIN departments d ON e.department_id = d.department_id;

总结

就是  create view 视图名  as    后面就是正常的sql语句。

1.2 修改视图

ALTER VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

1.3 删除视图

DROP VIEW view_name;

1.4 视图特点

  • 视图不存储数据,它们是动态生成的,每次查询视图时都会执行定义视图的 SQL 语句。
  • 可以有权限控制,允许用户访问视图而不必直接访问底层表。【增加安全性
  • 可以用于实现复杂的查询逻辑,如连接(JOIN)多个表。

1.5用途

  • 提供数据的逻辑表示,简化复杂的 SQL 操作。
  • 限制用户访问特定数据,增强数据的安全性。
  • 作为数据的抽象层,使得应用程序不必关心底层数据结构的变化。

2.索引

索引,可以理解为是一本书的目录,它记录了数据在数据库中存放的位置,就像一本书的目录,记录了,某一页在这本书的那个位置。相同地, 索引是一个单独的、存储在磁盘上的数据库结构,它们包含着对数据库表里所有记录的引用指针。
MySQL中索引的存储类型有两种:BTREE(树)和 HASH(哈希),具体和表的存储引擎有关。MyISAM和InnoDB存储引擎只支持BTREE索引。

重新举一个例子:

想象一下,你有一书架的书,每本书都有一个独特的标题,你可以很容易地通过书名找到任何一本书。但是,如果你想要找到所有关于特定主题的书,比如“烹饪”,你可能需要一本索引书,它列出了关于烹饪的所有书籍的标题和它们在书架上的位置。这样,你就不用一本一本地检查每一本书的封面了,你可以直接去索引书中标记的位置找到所有烹饪书籍。

在数据库中,索引的作用类似。数据库中的数据就像是你书架上的书籍,而索引就是那本帮助你快速找到特定信息的索引书。

  1. 加快搜索速度:就像索引书让你快速找到烹饪书籍一样,数据库索引可以让你快速检索到特定的数据记录,而不需要扫描整个数据库。

  2. 组织数据:索引可以帮助数据库以特定的顺序存储和检索数据,比如按照日期或字母顺序。

  3. 提高效率:当你需要执行搜索、排序或分组等操作时,索引可以显著提高这些操作的效率

创建索引就像是在数据库中创建了一个快速通道,它允许数据库管理系统(DBMS)更快地找到数据,而不必检查数据库中的每一条记录。但是,就像索引书需要占用额外的空间一样,数据库索引也会占用额外的存储空间,并且在数据更新时(如插入、删除或修改记录)需要维护索引,这可能会稍微减慢这些操作的速度。

2.1 索引的分类

2.1.1 普通索引

  • 这是最基本的索引类型
  • 而且它没有唯一性之类的限制

2.1.2唯一性索引

  • 与普通索引类似,区别是唯一索引列的所有值都只能出现一次,即必须唯一
  • 当现有数据库中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存
  • 数据库还可能防止添加将在表中创建重复键值的新数据
  • 例如,如果在员工信息统计表中对员工的姓(name)上创建了唯一索引,则任何两个员工都不能同姓

2.1.2 主键索引

  • 主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”
  • 在数据库中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型
  • 该索引要求主键中每个值都唯

2.1.3 全文索引

  • 索引类型为 FULLTEXT
  • 适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息
  • 全文索引可以在 CHAR、VARCHAR 或 TEXT 类型的列上创建
  • 每个表只允许有一个全文索引
  • 主要用于搜索大型文本或者二进制列中的关键词

2.1.4  组合索引(单列索引与多列索引)

  • 索引可以是单列上创建的索引,也可以是在多列上创建的索引
  • 多列索引可以区分其中一列可能有相同值的行
  • 如果经常同时搜索两列、多列、按两列或多列排序时,索引也很有帮助
  • 例如,如果经常在同一查询中为姓和名两列设置查询条件,那么这两列上创建多列索引将很有意义

2.2 索引的创建

2.2.1 普通索引的创建

CREATE INDEX 索引名 ON 表名 (列名[(length)]);#(列名(length)):length是可选项,下同
#如果忽略 length 的值,则使用整个列的值作为索引
#如果指定使用列前的 length 个字符来创建索引,这样有利于减小索引文件的大小
#索引名建议以“_index”结尾例:
create index phone_index on member (phone);
#直接创建索引select phone from member

2.2.2 唯一索引的创建

CREATE UNIQUE INDEX 索引名 ON 表名(列名);例:
create unique index address_index on member (address);
#注意,创建唯一索引必须得满足每个值都是唯一的,否则无法创建show create table member;

2.2.3  创建主键索引

CREATE TABLE 表名 ([...],PRIMARY KEY (列名));例:
create table test1 (id int primary key,name varchar(20));
#这里用了两种方式创建,一种是在字段中直接指定,第二种是在字段结束后指定
create table test2 (id int,name varchar(20),primary key (id));show create table test1;
show create table test2;

2.2.4 全文索引

CREATE FULLTEXT INDEX 索引名 ON 表名 (列名);例:
create fulltext index remark_index on member (remark);
#全文索引 fulltext,全文只可在 char、varchar、text 类型上创建,且每个表只允许有一个
show create table member;

2.2.5 组合索引

CREATE TABLE 表名 (列名1 数据类型,列名2 数据类型,列名3 数据类型,INDEX 索引名 (列名1,列名2,列名3));select * from 表名 where 列名1='...' AND 列名2='...' AND 列名3='...';例:
create table test001 (id int not null,name varchar(20),cardid varchar(20),index index_amd (id,name));show create table test001;insert into test001 values(1,'wangsansan','123123');select * from test001 where name='wangsansan' and id=1;

3.索引和视图的区别

  • 存储方式:视图不存储数据,而索引是物理存储的数据结构。
  • 目的:视图用于提供数据的逻辑表示和简化查询,索引用于提高数据检索效率。
  • 使用场景:视图常用于数据安全和简化复杂查询,索引用于优化查询性能。
  • 性能影响:索引可以提高查询速度,但可能会降低数据修改的速度;视图对性能的影响主要取决于其定义的复杂性。
  • 数据更新:视图不直接存储数据,所以对视图的更新可能会转化为对底层表的更新;索引是静态的,不会因数据更新而改变,除非索引被显式更新或重建。

还没有更完,后续后继续更新的~~~~~~

相关文章:

数据库视图和索引

参考链接: 数据库的视图和索引的概念和区别_索引和视图的区别-CSDN博客 MySQL 数据库--索引(理论详解及实例演示)_数据库索引-CSDN博客 1.视图 视图是从一个或多个表中导出来的表,是一种不是一种真正存在的概念。这样&#xf…...

哈希表的底层实现(1)---C++版

目录 哈希表的基本原理 哈希表的优点 哈希表的缺点 应用场景 闭散列法 开散列法 开放定值法Open Addressing——线性探测的模拟实现 超大重点部分评析 链地址法Separate Chaining——哈希桶的模拟实现 哈希表(Hash Table)是一种数据结构&#x…...

如何使用PTK一键安装opengaussdb 5.0

1、关于PTK工具 MogDB数据库是云和恩墨基于openGauss开源数据库打造,安稳易用的企业级关系型数据库。 PTK是云和恩墨出品的一款工具,帮助用户更便捷地部署管理MogDB数据库。 1.1 使用场景 开发人员快速启动多个本地 MogDB 环境用户通过 PTK 快速安装…...

跟李沐学AI:长短期记忆网络LSTM

输入们、遗忘门和输出门 LSTM引入输入门、忘记门和输出门 输入门计算公式为:。 遗忘门计算公式为:。 输出门计算公式为:。 它们由三个具有sigmoid激活函数的全连接层处理, 以计算输入门、遗忘门和输出门的值。 因此&#xff0c…...

【BIM模型数据】BIM模型的数据如何存储,BIM大模型数据云端存储,需要考虑哪些因素,BIM模型数据存储和获取

【BIM模型数据】BIM模型的数据如何存储,BIM大模型数据云端存储,需要考虑哪些因素,BIM模型数据存储和获取 BIM文件的结构化数据和非结构化数据的存储方式,需要根据数据的特性和使用需求来选择。以下是一些推荐的存储策略&#xff1…...

【LLM大模型】大模型架构:layer\_normalization

2.layer_normalization 1.Normalization 1.1 Batch Norm 为什么要进行BN呢? 在深度神经网络训练的过程中,通常以输入网络的每一个mini-batch进行训练,这样每个batch具有不同的分布,使模型训练起来特别困难。Internal Covariat…...

PON光模块的独特类型和特性

在当前互联网需求快速增长的背景下,PON光模块已成为实现光纤网络高速数据传输的重要组成部分。从住宅宽带到各种企业应用程序解决方案,PON光模块始终致力于实现高质量的数据传输与无缝通信。了解PON光模块的类型和特性对于深入理解现代网络基础设施至关重…...

架构与业务的一致性应用:实现企业战略目标和合规管理的全面指南

在当今快速变化的数字经济中,信息架构已成为企业实现其业务目标、优化运营效率和确保数据安全的关键工具。 一个成功的信息架构不仅要与企业的战略目标紧密对齐,还必须遵循日益严格的合规性要求,以保护敏感数据并满足法规规定。《信息架构&a…...

时尚穿搭想换就换,各种风格一键完美搭配!亲测在线虚拟试衣换装平台效果超赞!

随着科技的发展,时尚领域也迎来了新的革命。传统的试衣方式逐渐被现代科技所取代,虚拟试衣间的出现使得用户可以在舒适的家中轻松体验不同的服装风格。 先前给大家也介绍过一些虚拟试衣的技术,例如AnyFit或者OutfitAnyone等,今天…...

【C++】C++ 标准库string类介绍(超详细解析,小白必看系列)

C 标准库中的 std::string 类是一个非常强大的工具&#xff0c;用于处理和操作字符串。它属于 <string> 头文件&#xff0c;并提供了一套丰富的功能和方法。以下是 std::string 类的一些主要特性和常用操作&#xff1a; 1 string简介 字符串是表示字符序列的类 标准的字…...

若依RuoYi项目环境搭建教程(RuoYi-Vue + RuoYi-Vue3版本)

文章目录 一、开发脚手架选择二、RuoYi框架1、介绍2、版本发展3、为什么选择若依4、优缺点5、项目内置功能 三、后端项目部署1、拉取源码2、环境要求3、Maven构建4、MySQL相关&#xff08;1&#xff09;导入SQL脚本&#xff08;2&#xff09;配置信息 5、Redis相关&#xff08;…...

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果&#xff1a; 解密后的数据就是正常数据&#xff1a; 后端&#xff1a;使用的是spring-cloud框架&#xff0c;在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30…...

HarmonyOS开发之使用PhotoViewPicker(图库选择器)保存图片

一&#xff1a;效果图 二&#xff1a;添加依赖 import fs from ohos.file.fs;//文件管理 import picker from ohos.file.picker//选择器 三&#xff1a;下载&#xff0c;保存图片的实现 // 下载图片imgUrldownloadAndSaveImage(imgUrl: string) {http.createHttp().request(…...

跨境独立站支付收款常见问题排雷篇1.0丨出海笔记

最近小伙伴们在社群讨论挺多关于独立站支付问题的&#xff0c;鉴于不少朋友刚接触独立站&#xff0c;我整理了一些独立站支付相关的问题和解决方案&#xff0c;供大家参考&#xff0c;百度网上一堆媒体的那些软文大家就别看了&#xff0c;都是软广或者抄来抄去&#xff0c;让大…...

uni-app实现web-view和App之间的相互通信

双向实时 如果app端部署成网站&#xff0c;则web-view就是iframe&#xff0c;使用也可以双向通讯 https://uniapp.dcloud.net.cn/component/web-view.html APP端代码 index.vue: <template><web-viewid"m-webview":fullscreen"true":src"…...

HTB-Vaccine(suid提权、sqlmap、john2zip)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天来为大家讲解Vaccine靶机 渗透过程 信息搜集 服务器开放了 21FTP服务、22SSH服务、80HTTP服务 通过匿名登录FTP服务器 通过匿名登录到服务器&#xff0c;发现backup.zip文件&#xff0c;可能存在账号密码 发现b…...

【达梦数据库】异构数据库迁移到达梦

目录 1、迁移准备2、正式迁移3、问题处理3.1、return附近出现错误3.1.1、排查过程3.1.2、问题原因3.1.2、解决方法 3.2、对象[XXX]处于无效状态-类型13.2.1、排查过程3.2.2、问题原因3.2.3、解决方法 3.3、对象[XXX]处于无效状态-类型23.3.1、排查过程3.3.2、问题原因3.3.3、解…...

抽象类和接口(1)

抽象类&#xff1a; 什么是抽象类&#xff1a; 听着就很抽象&#xff0c;确实挺抽象&#xff0c;先来写一个抽象类感觉一下&#xff1a; 这就是抽象类&#xff01; 在 Java 中&#xff0c;一个类如果被 abstract 修饰称为抽象类&#xff0c;抽象类中被 abstract 修饰的方法…...

epoll内核原理与实现详解

目录 1 epoll相关理论基础 1.1 I/O多路复用技术 1.2 事件驱动模型 1.2.1 基本概念 1.2.2 优缺点分析 1.2.3 与epoll的关联 1.3 epoll机制简介 1.3.1 核心原理 1.3.2 优点 2 epoll内核原理 2.1 epoll数据结构 2.1.1 主要数据结构 2.1.2 数据结构关系 2.2 epoll工作…...

被低估的SQL

SQL是现代数据库管理系统中不可或缺的一部分。尽管它的使用已十分普遍&#xff0c;但在数据处理领域&#xff0c;SQL的某些功能和潜力仍然被许多人低估。接下来&#xff0c;小编将与您一起&#xff0c;探讨SQL的一些被忽视的特性&#xff0c;揭示它在数据管理中的真正实力。 1.…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

向量几何的二元性:叉乘模长与内积投影的深层联系

在数学与物理的空间世界中&#xff0c;向量运算构成了理解几何结构的基石。叉乘&#xff08;外积&#xff09;与点积&#xff08;内积&#xff09;作为向量代数的两大支柱&#xff0c;表面上呈现出截然不同的几何意义与代数形式&#xff0c;却在深层次上揭示了向量间相互作用的…...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器&#xff08;TI&#xff09;推出的一款 汽车级同步降压转换器&#xff08;DC-DC开关稳压器&#xff09;&#xff0c;属于高性能电源管理芯片。核心特性包括&#xff1a; 输入电压范围&#xff1a;2.95V–6V&#xff0c;输…...

Appium下载安装配置保姆教程(图文详解)

目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...