一般网站建设用什么语言,济南全屋定制,潍坊市建设局网站,宽屏大气网站源码参考链接#xff1a;
数据库的视图和索引的概念和区别_索引和视图的区别-CSDN博客
MySQL 数据库--索引#xff08;理论详解及实例演示#xff09;_数据库索引-CSDN博客
1.视图
视图是从一个或多个表中导出来的表#xff0c;是一种不是一种真正存在的概念。这样#xf…参考链接
数据库的视图和索引的概念和区别_索引和视图的区别-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 member2.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 namewangsansan and id1;3.索引和视图的区别
存储方式视图不存储数据而索引是物理存储的数据结构。目的视图用于提供数据的逻辑表示和简化查询索引用于提高数据检索效率。使用场景视图常用于数据安全和简化复杂查询索引用于优化查询性能。性能影响索引可以提高查询速度但可能会降低数据修改的速度视图对性能的影响主要取决于其定义的复杂性。数据更新视图不直接存储数据所以对视图的更新可能会转化为对底层表的更新索引是静态的不会因数据更新而改变除非索引被显式更新或重建。 还没有更完后续后继续更新的~~~~~~