当前位置: 首页 > 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.…...

数字证书、数字签名及其关系

一.数字证书与数字签名 1.数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。简单地说&#xff0c;数字证书是一段包含用户身份信息、用户公钥信息以及份验证机构数字签名的数据。 通俗理解&#xff1a;数字证书相当于【身份证】 —— 确认你…...

一文读懂:如何将广告融入大型语言模型(LLM)输出

本文是我翻译过来的&#xff0c;讨论了在线广告行业的现状以及如何将大型语言模型&#xff08;LLM&#xff09;应用于在线广告。 原文请参见”阅读原文“。 在2024年&#xff0c;预计全球媒体广告支出的69%将流向数字广告市场。这个数字预计到2029年将增长到79%。在Meta的2024…...

godotenv拜读

简介 应用提倡将配置存储在环境变量中。任何从开发环境切换到生产环境时需要修改的东西都从代码抽取到环境变量里。 但是在实际开发中&#xff0c;如果同一台机器运行多个项目&#xff0c;设置环境变量容易冲突&#xff0c;不实用。godotenv库从.env文件中读取配置&#xff0c;…...

解析REST API与OpenAPI之差异:避免混淆

在网络API领域&#xff0c;常提及的两种术语为Rest API与Open API&#xff0c;其既存在差异亦存在联系。前者是一种API设计方式&#xff0c;后者则是一种API描述及定义规范。值得注意的是&#xff0c;OpenAPI 可用于描述和定义REST API。 什么是REST API&#xff1f; REST API …...

一篇文章就搞懂了:过虑器 、拦截器 、监听器是什么

java 过虑器 、拦截器 、监听器的区别? ‌实现原理‌&#xff1a; 过滤器基于函数回调实现。拦截器基于Java的反射机制实现。监听器用于监听特定事件的发生&#xff0c;并作出相应处理。 ‌使用范围‌&#xff1a; 过滤器依赖于Tomcat等容器&#xff0c;主要用于Web程序。拦截…...

本体映射与本体集成

文章目录 本体映射与本体集成本体映射分类知识挖掘是从己有的实体及实体关系出发挖掘新的知识,具体包括知识内容挖掘和知识结构挖掘。 本体映射与本体集成 解决本体异构的通用方法是本体集成与本体映射。本体集成直接将多个本体合并为一个大本体,本体映射则寻找本体间的映射…...

华媒舍:10种提升推特大V发文推广曝光率的方式

在社交媒体时代&#xff0c;推特已成为许多大V达到更广泛受众的重要渠道。并非所有的推文都能获得理想的曝光率。为了帮助大V们提升推文的曝光率&#xff0c;本文将介绍10种有效的方式。 1. 精心构思内容 好的内容是吸引读者和提升曝光率的关键。大V们应该从听众的角度出发&am…...

前端本地存储数据:深入解析与代码示例(Cookie、LocalStorage、SessionStorage和IndexedDB)

在现代Web应用中&#xff0c;前端本地存储是实现用户个性化体验的关键技术。本文将深入探讨前端本地存储的四种主要技术&#xff1a;Cookie、LocalStorage、SessionStorage和IndexedDB&#xff0c;并提供具体的代码示例。 Cookie 简介 Cookie是由服务器创建并存储在用户浏览…...

Java语言程序设计基础篇_编程练习题*18.21 (将十进制数转换为二进制数)

*18.21 (将十进制数转换为二进制数) 编写一个递归方法&#xff0c;将一个十进制数转换为一个二进制数的字符串。方法头如下: public static String dec2Bin(int value)编写一个测试程序&#xff0c;提示用户输入一个十进制数&#xff0c;然后显示等价的二进制数。 代码示例 …...

中年转行新可能:18 个月迈向大模型提示词工程师

【导读】 人到中年&#xff0c;想半路转行成为大模型提示词工程师&#xff0c;这可行吗&#xff1f;最近&#xff0c;一位国外小哥成功转行&#xff0c;他在一篇干货满满的硬核博客中给出了答案&#xff1a;完全可行&#xff01; 转行成为大模型提示词工程师&#xff0c;到底…...