C#基础知识及题目练习 Day27 数据库高阶 视图和索引

目录

一、视图

1.概念:

2.特点:

3.创建视图:

4.更新视图:

5.删除视图

二、索引

1.概念

2.索引类型

3.创建索引

4.删除索引

5.优缺点及使用情况


一、视图

1.概念:

视图相当于创建的一张虚拟表或存储查询,视图访问的数据不作为独特的对象存储在数据库内。

可以包含一个表中的所有行或从表中选择部分行。

视图可以从一个或多个表取决于书面SQL查询来创建。

 

2.特点:

  • 视图着重于特定数据。
  • 视图可以限定查询数据。
  • 简化数据的操作,易维护。

 

3.创建视图:

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

WITH CHECK OPTION:CREATE VIEW语句选项。目的是为了确保所有更新和插入满足视图定义的条件。如果它没有满足条件,在UPDATEINSERT返回一个错误。

调用:select 

把视图当做一张表!

eg:

--create view Stu_nv as select FName,FAge from MyStudent where FGender='女'

--select * from Stu_nv

--联合多表查询
--create view view_StuInfo as select FName,FAge,FGender,classId from MyClass left join MyStudent on MyClass.classId=MyStudent.FClassId WITH CHECK OPTION

--select * from view_StuInfo

 

4.更新视图:

右键--编写视图脚本为--ALTER到

在一定条件下可以更新:

SELECT子句不包含关键字DISTINCT

SELECT子句不包含汇总函数

SELECT子句不包含集合函数

SELECT子句不能包含集合运算符

SELECT子句不能包含一个ORDER BY子句。

FROM子句中不能包含多个表

WHERE子句不能包含子查询

查询不包含GROUP BYHAVING

计算列无法更新。

从基表中的所有NOT NULL列必须包含在视图是为了使用INSERT查询功能。

 

UPDATE CUSTOMERS_VIEW SET AGE = 35 WHERE name='Ramesh';

视图中的操作会影响原表!!

 

5.删除视图

视图中删除行:

DELETE FROM CUSTOMERS_VIEW WHERE age = 22;

删除视图:

DROP VIEW CUSTOMERS_VIEW;

 

二、索引

1.概念

    是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构。

例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的通过索引可以大大的提高数据库的检索速度,提高数据库的性能。

 

2.索引类型

Ø唯一索引

Ø主键索引

Ø聚集索引:表中各行的物理顺序与键值的逻辑顺序相同,每个表只能有一个----类比拼音查字法!!

注: 因为数据库中的数据只能按照一个顺序进行排列,所以聚集索引一个数据库只能有一个。在mysql中,不能自己创建聚集索引,主键即为聚集索引,如果没有创建主键,那么默认非空的列为聚集索引,如果没有非空的列那么会自动生成一个隐藏列为聚集索引。所以一般在mysql中,我们创建的主键即为聚集索引,数据是按照我们的主键顺序进行排列。所以在根据主键进行查询时会非常快。

Ø非聚集索引:非聚集索引指定表的逻辑顺序,数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。

注:非聚集索引可以简单理解为有序目录,是一种以空间换取时间的方法。为id_num添加了非聚集索引后,会给id_num进行排序(内部使用结构为B+树),并且排序后,我只需要查询此目录(即查询B+),很快就知道为id56的在数据库中的第67条,而不需要在去遍历表中的所有数据。所以,在非聚集索引中,不重复的数据越多,那么索引的效率越高

 

3.创建索引

CREATE INDEX index_name ON table_name (column_name)

创建唯一索引:

CREATE UNIQUE INDEX index_name ON table_name (column_name)

降序:在列名称之后添加保留字 DESC

eg: CREATE INDEX PersonIndex ON Person (LastName DESC)

 

4.删除索引

DROP INDEX index_name ON talbe_name

 

5.优缺点及使用情况

  • 优点:加快访问速度;加强行的唯一性
  • 缺点:带索引的表在数据库中的存储需要更多的空间;

下列情况下可以使用索引:

  • 该列频繁用于搜索;
  • 该列用于对数据进行排序;

下列情况下避免使用索引:

  • 列中仅仅包含几个不同的值

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值