数据库视图和索引
参考链接:
数据库的视图和索引的概念和区别_索引和视图的区别-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;
多个表
假设我们有两个表:employees
和 departments
。employees
表包含员工的详细信息,而 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索引。
重新举一个例子:
想象一下,你有一书架的书,每本书都有一个独特的标题,你可以很容易地通过书名找到任何一本书。但是,如果你想要找到所有关于特定主题的书,比如“烹饪”,你可能需要一本索引书,它列出了关于烹饪的所有书籍的标题和它们在书架上的位置。这样,你就不用一本一本地检查每一本书的封面了,你可以直接去索引书中标记的位置找到所有烹饪书籍。
在数据库中,索引的作用类似。数据库中的数据就像是你书架上的书籍,而索引就是那本帮助你快速找到特定信息的索引书。
-
加快搜索速度:就像索引书让你快速找到烹饪书籍一样,数据库索引可以让你快速检索到特定的数据记录,而不需要扫描整个数据库。
-
组织数据:索引可以帮助数据库以特定的顺序存储和检索数据,比如按照日期或字母顺序。
-
提高效率:当你需要执行搜索、排序或分组等操作时,索引可以显著提高这些操作的效率
创建索引就像是在数据库中创建了一个快速通道,它允许数据库管理系统(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.视图 视图是从一个或多个表中导出来的表,是一种不是一种真正存在的概念。这样…...

哈希表的底层实现(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激活函数的全连接层处理, 以计算输入门、遗忘门和输出门的值。 因此,…...
【BIM模型数据】BIM模型的数据如何存储,BIM大模型数据云端存储,需要考虑哪些因素,BIM模型数据存储和获取
【BIM模型数据】BIM模型的数据如何存储,BIM大模型数据云端存储,需要考虑哪些因素,BIM模型数据存储和获取 BIM文件的结构化数据和非结构化数据的存储方式,需要根据数据的特性和使用需求来选择。以下是一些推荐的存储策略࿱…...

【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 类是一个非常强大的工具,用于处理和操作字符串。它属于 <string> 头文件,并提供了一套丰富的功能和方法。以下是 std::string 类的一些主要特性和常用操作: 1 string简介 字符串是表示字符序列的类 标准的字…...

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

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密
加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30…...

HarmonyOS开发之使用PhotoViewPicker(图库选择器)保存图片
一:效果图 二:添加依赖 import fs from ohos.file.fs;//文件管理 import picker from ohos.file.picker//选择器 三:下载,保存图片的实现 // 下载图片imgUrldownloadAndSaveImage(imgUrl: string) {http.createHttp().request(…...

跨境独立站支付收款常见问题排雷篇1.0丨出海笔记
最近小伙伴们在社群讨论挺多关于独立站支付问题的,鉴于不少朋友刚接触独立站,我整理了一些独立站支付相关的问题和解决方案,供大家参考,百度网上一堆媒体的那些软文大家就别看了,都是软广或者抄来抄去,让大…...

uni-app实现web-view和App之间的相互通信
双向实时 如果app端部署成网站,则web-view就是iframe,使用也可以双向通讯 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)
前言 各位师傅大家好,我是qmx_07,今天来为大家讲解Vaccine靶机 渗透过程 信息搜集 服务器开放了 21FTP服务、22SSH服务、80HTTP服务 通过匿名登录FTP服务器 通过匿名登录到服务器,发现backup.zip文件,可能存在账号密码 发现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)
抽象类: 什么是抽象类: 听着就很抽象,确实挺抽象,先来写一个抽象类感觉一下: 这就是抽象类! 在 Java 中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 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是现代数据库管理系统中不可或缺的一部分。尽管它的使用已十分普遍,但在数据处理领域,SQL的某些功能和潜力仍然被许多人低估。接下来,小编将与您一起,探讨SQL的一些被忽视的特性,揭示它在数据管理中的真正实力。 1.…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...