数据库视图和索引

本文介绍了数据库视图的概念,包括视图的创建、操作及其作用,如简化用户操作、提供数据安全性等。同时,文章探讨了索引的本质、类型,如聚集索引的特点,以及索引在提升数据检索速度、实现参照完整性和优化查询性能等方面的优势,同时也指出索引的潜在缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

视图:视图是从一个或多个表或视图中导出的表,这些表或视图称作该视图的基本表,视图的基本结构和数据都是建立在对基本表的查询上。视图并不是一个真实的表,只有其定义,而没有存储其恶空间。

创建视图:视图在数据库中是当作一个对象来存储的。创建视图要保证授权者可以使用create view 语句,并且有权操作视图所涉及的其他表或视图。

创建语句一般格式为: create view <视图名>  as select  查询子句 [with check option];

说明:

1.视图名须遵守规范,不能与已经有的表重名,并且对每个视图名必须是唯一的,即对不同的用户,即使定义相同的视图,也必须使用不同的名字。

2.select 子句是用来创建视图的子句,视图的内容就是select字句所查询出来的内容,select 语句可以非常复杂,但通常不允许有orderby和distinct字句。

3.视图列表名是视图中所包含的列。若使用与原表或视图相同的列名时,则不必指定列名列表。若指定列名列表,则需要全部指定不能给出一部分。

操作视图:视图的增删改查和对表的操作差不多。

视图的作用:

1.视图能够简化用户的操作。利用视图可以为用户集中数据,简化用户数据的查询和处理。有时用户所需要的数据在多张表里,定义视图可以让他们集中在一起,从而方便查询和处理。

2.视图能够使用户以多种角度看待同一数据。通过给不同的用户定义不同的视图,能够让不同的用户以不同的角度来共享视图。

3.视图对重构数据库提供了一定程度的逻辑独立性。

4.能够对机密数据提供安全保护。

5.适当的使用视图可以更清晰的表达查询。

索引:实质上得是单独的,物理的数据库结构,他是表中的一个列或者多个列的值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。(以空间换时间)

索引的类型:根据索引的顺序与数据表中的顺序是否相同,可以把索引分为两种类型。一种是物理顺序与索引顺序相同的称为聚集索引,另一种称为非聚集索引。

聚集索引的特点:

1.每张表只能有一个聚集索引,因为表中物理顺序只能有一个。

2.在创建任何非聚集索引前创建聚集索引。

索引的优点:

1.可以大大加快数据的检索速度。

2.通过穿件唯一性索引,可以确保每一行的数据的唯一性。

3.可以加快表与表之间的联系,特别容易实习数据的参照完整性。

4.在使用分组字句和排序字句进行数据检索时,可以显著提高效率。

缺点:创建维护要花时间,索引也要占据空间。

 

### MySQL 数据库中的视图索引 #### 视图 (View) 视图是一种虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列数据。然而,视图并不在数据库中以存储的数据值集形式存在。行数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成[^1]。 ##### 创建视图 要创建视图,可以使用 `CREATE VIEW` 语句: ```sql CREATE VIEW view_name AS SELECT column1, column2... FROM table_name WHERE condition; ``` ##### 删除视图 删除视图可以通过 `DROP VIEW` 命令完成: ```sql DROP VIEW IF EXISTS view_name; ``` 视图主要用于简化复杂的 SQL 操作,在不同场景下重用 SQL 语句;使用户能以多种自然的方式看待同一物理数据;隔离应用程序与基础表结构的变化以及提供了一定程度的安全性,通过限制对特定行特定列的访问来保护敏感数据。 #### 索引 (Index) 索引是对数据库表中一列或多列的值进行排序的一种结构,用于快速高效地获取数据。它类似于书籍的目录,可以帮助加速查找操作而不必扫描整个表格的内容。 ##### 创建索引 创建索引的方法如下所示: ```sql ALTER TABLE table_name ADD INDEX index_name(column_name); ``` 对于更复杂的需求还可以指定升序或降序排列方式: ```sql ALTER TABLE t_log ADD INDEX t_log_url(url ASC); ``` ##### 查看SQL是否利用了索引 为了确认某个查询是否有效地使用到了已建立好的索引,可借助于 `EXPLAIN` 关键字前缀执行该查询命令并观察输出结果中的 key 字段是否有对应的索引被命中。 ##### 删除索引 当不再需要某索引时可通过下面这条指令将其移除: ```sql DROP INDEX index_name ON table_name; ``` #### 视图索引的区别 - **功能定位**:视图主要作用在于逻辑层面的数据抽象化处理,而索引则侧重于提高读取性能; - **实际影响**:修改底层真实表会影响基于此表构建的所有视图的结果展示,但不会直接影响到任何现有的索引效率; - **维护成本**:更新含有大量记录的大规模表上的索引可能会带来额外开销,相比之下,视图本身不占用额外空间也不涉及物理存取路径调整等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值