数据库的视图和索引

数据库的视图

视图又叫虚表。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

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

视图的主要作用

1、安全,权限控制。一些数据表有着重要的信息。有些字段是保密的,不能让用户直接看到。这时就可以创建一个视图,在这张视图中只保留一部分字段。这样,用户就可以查询自己需要的字段,不能查看保密的字段。

2、性能快。关系数据库的数据常常会分表存储,使用外键建立这些表的之间关系。这时,数据库查询通常会用到连接(JOIN)。这样做不但麻烦,效率相对也比较低。如果建立一个视图,将相关的表和字段组合在一起,就可以避免使用JOIN查询数据。

3、灵活,抽取即将废弃表,产生有用价值。如果系统中有一张旧的表,这张表由于设计的问题,即将被废弃。然而,很多应用都是基于这张表,不易修改。这时就可以建立一张视图,视图中的数据直接映射到新建的表。这样,就可以少做很多改动,也达到了升级数据表的目的。

视图的基本操作
创建视图:

create  view viewName(参数列表/可以不写这样就是默认和下面的select一样)

as select * from   表名;

例1:

(1)、create  table viewdemo(id int primary key , name char(10),score  float);

(2)、create  view  view1

as select* from  viewdemo;

(3)、create view view2(name,score)

as select name ,score from  viewdemo;

注意:

1.视图名须遵守规范,不能与已经有的表重名,并且对每个视图名必须是唯一

的,即对不同的用户,即使定义相同的视图,也必须使用不同的名字。

2.select 子句是用来创建视图的子句,视图的内容就是select字句所查询出

来的内容,select 语句可以非常复杂,但通常不允许有orderby和distinct

字句。

3.视图列表名是视图中所包含的列。若使用与原表或视图相同的列名时,则不必

指定列名列表。若指定列名列表,则需要全部指定不能给出一部分。


修改视图:

alter  view  viewname (columns)  as  select columns from   tableName ;

例:

 alter view  view2 (id ,name)  as select  id,name from  viewdemo ;



删除视图:

 drop  view if exists  view  viewName;

例:

drop   view  view2;
视图的分类

视图可以分为三种:标准视图索引视图分区视图

通常情况下的视图都是标准视图,他是一个虚拟表,不占物理存储空间。如果希望提高聚合多行数据的视图性能,可以创建索引视图。

索引视图是被物理化的视图,它包含经过计算的物理数据。

通过使用分区视图,可以连接一台或者多台服务器成员表中的分区数据,使得这些数据看起来就像来自一个表中一样。


数据库的索引

索引是一个单独的、存储在磁盘上的数据库结构,它们包含着对数据库表里所有记录的引用指针。
MySQL中索引的存储类型有两种:BTREE(树)和 HASH(哈希),具体和表的存储引擎有关。MyISAM和InnoDB存储引擎只支持BTREE索引。

索引的类型:

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

聚集索引的特点:
1.每张表只能有一个聚集索引,因为表中物理顺序只能有一个。
2.在创建任何非聚集索引前创建聚集索引。

索引的优缺点:

优点:
1.可以大大加快数据的检索速度。
2.通过穿件唯一性索引,可以确保每一行的数据的唯一性。
3.可以加快表与表之间的联系,特别容易实习数据的参照完整性。
4.在使用分组字句和排序字句进行数据检索时,可以显著提高效率。

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

索引的sql语句:
CREATE TABLE 表名 [列名称 数据类型 ]  
[ UNIQUE | FULLTEXT ]   
[ INDEX | KEY  ]    
[ 索引名称 ]   
(列名称[ length ])  
[ ASC | DESC]

说明:  UNIQUE  、 FULLTEXT  为可选参数,分别表示唯一索引、全文索引;INDEX 与 KEY为同义词,两者的作用相同,用来指定索引;

(1)、普通索引(index): 普通索引是MySQL的基本索引类型,允许在定义索引的列中插入重复值和空值

例:
CREATE  TABLE book
(
bookid   INT  NOT  NULL,
bookname VARCHAR(100)  NOT  NULL,
authors  VARCHAR(100)  NOT  NULL,
info  VARCHAR(500) NULL,
year_publication   YEAR  NOT  NULL,
INDEX(year_publication)
);

(2)、唯一索引(unique):唯一索引列的值必须唯一,但允许有空值。主键索引是一种特殊的唯一索引,不允许有空值。

例:
CREATE TABLE  book
(
  id  INT  NOT  NULL,
  name  CHAR(50)  NOT  NULL,
  UNIQUE  INDEX   UniqueIdx(id)
);

(3)、联合索引:组合索引即是在多个列上创建索引。查询时,只有在查询条件中使用了这些字段(创建组合索引的时候指定的哪些列)的最左边字段时,索引才会被使用。

CREATE TABLE student
(
  id  INT  NOT  NULL,
  name  CHAR(50)  NOT  NULL,
  age  INT  NOT  NULL,
  info  VARCHAR(200),

  INDEX   MultiIdx(id,name,age)
);

(4)、全文索引:MySQL只有MyISAM存储引擎支持FULLTEXT索引,并且类类型为CHAR、TEXT、VARCHAR。 并且需要指定表的存储引擎为MyISAM。
例:
CREATE TABLE t4
(
  id  INT  NOT  NULL,
  name  CHAR(50)  NOT  NULL,
  age  INT  NOT  NULL,
  info  VARCHAR(200),
  FULLTEXT INDEX   FullindexName(info)
) ENGINE = MyISAM ;

 在已经存在的表上创建索引:

ALTER TABLE table_name ADD [ UNIQUE | FULLTEXT ]   
[ INDEX | KEY ] 
[ inex_name ]  
(col_name [ length ] ,...)  
[ ASC | DESC ]

(1)、普通索引:
ALTER  TABLE  book  ADD  INDEX indexName( bookname(30) );
(2)、唯一索引:
ALTER  TABLE  book  ADD UNIQUE INDEX  UniqueIdx( bookid );
(3)、组合索引:
ALTER  TABLE  book  ADD  INDEX  BkAndInfoIdx( authors(20), info(50) );
(4)、全文索引:
ALTER TABLE t6  ADD  FULLTEXT  INDEX infiIdx(info);
(前提是这个表的存储引擎为 MyISAM)

使用 create  index  创建索引:

CREATE  [ UNIQUE | FULLTEXT ]   
[ INDEX | KEY ]  
INDEX index_name
ON table_name ( col_name[ length ] , ... )  
[ ASC | DESC ]
  例:在表book的bookname字段上建立名为BkNameIdx的索引。
CREATE INDEX  BkNameIdx   ON   book (bookname);
  例: 在book表的bookId字段上建立唯一索引。
CREATE   UNIQUE    INDEX  UniqueIdx    ON   book (bookId);

4、删除索引:
(1)、ALTER   TABLE  table_name   DROP   INDEX  index_name;
(2)、DROP    INDEX     index_name   ON  table_name ;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值