mysql深入之视图和索引

注:求职季,巩固下mysql知识!

1.视图

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

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

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

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

关于视图的学习,我建议你参考mysql手册。在网上找一些示例,很快就入门了。
2.分类

      视图在SQL中可以分为三类

      1 普通视图(Regular View)

sql模板

CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] 
[ WITH <view_attribute> [ ,...n ] ] 
AS select_statement 
[ WITH CHECK OPTION ] [ ; ]
<view_attribute> ::= 
{
    [ ENCRYPTION ]
    [ SCHEMABINDING ]
    [ VIEW_METADATA ]     } 
解释:

  参数还是比较少的,现在解释一下上面的参数:

   ENCRYPTION:视图是加密的,如果选上这个选项,则无法修改.创建视图的时候需要将脚本保存,否则再也不能修改了

   SCHEMABINDING:和底层引用到的表进行定义绑定。这个选项选上的话,则视图所引用到的表不能随便更改构架(比如列的数据类型),如果需要更改底层表构架,则先drop或者alter在底层表之上绑定的视图.

   VIEW_METADATA:这个是个很有意思的选项.正如这个选项的名称所指示,如果不选择,返回给客户端的metadata是View所引用表的metadata,如果选择了这个选项,则返回View的metadata.再通俗点解释,VIEW_METADATA可以让视图看起来貌似表一样。View的每一个列的定义等直接告诉客户端,而不是所引用底层表列的定义。

   WITH Check Option:这个选项用于更新数据做限制

限制条件

  •   在View中,除非有TOP关键字,否则不能用Order By子句
  •    View在每个Schema中命名必须独一无二
  •    View不要嵌套尽量
  •    Compute,compute by,INTO关键字不允许出现在View中
  •    View不能建立在临时表
  •    View不能对全文索引进行查询
实例

建立视图

CREATE VIEW v_Test
AS
SELECT TOP 10 * FROM table1
查询视图

SELECT * FROM v_Test

      2索引视图(Indexed View)----会自动同步(好也坏)

       索引视图可以看作是一个和表(Table)等效的对象!,是真实存在于物理数据中。

 要求严格:(部分)

  • 索引视图涉及的基本表必须ANSI_NULLS设置为ON
  • 索引视图只能引用基本表

CREATE VIEW v_Test_Index
WITH SCHEMABINDING
AS
SELECT Name,ID
FROM CUSTOMER join NAME="PAUL"
ADN ID>5
GO
--在视图上建立索引
CREATE UNIQUE CLUSTERED INDEX index
ON v_Test_Index
底层直接聚集索引扫描----通过hash匹配,索引扫描,性能好

但是mysql没有

注:对索引的操作类似于CML可以使用ALTER,UPDATE,DELETE


附录:

mysql索引


1、什么是索引

  索引是一个单独的、存储在磁盘上的数据库结构,它们包含着对数据库表里所有记录的引用指针

MySQL中索引的存储类型有两种:BTREE(树)和 HASH(哈希),具体和表的存储引擎有关。MyISAM和InnoDB存储引擎只支持BTREE索引

2、索引的好处

  适当使用索引能提升数据库查询速度!

3、实例:

   在创建表的时候创建索引

    语法:
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 ;





  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习MySQL中的视图索引时,可以按照以下步骤进行: 1. 理解基本概念:首先,了解视图索引的基本概念和作用。明确视图是用于简化查询操作和逻辑封装的虚拟表,索引是用于加速数据检索的数据结构。 2. 学习语法和语句:熟悉创、修改和删除视图索引的语法和语句。了解如何使用CREATE VIEW、ALTER VIEW、DROP VIEW、CREATE INDEX、ALTER INDEX和DROP INDEX等命令来操作视图索引。 3. 创视图:学习如何创视图。掌握使用CREATE VIEW语句来定义视图的查询逻辑,包括选择要查询的列、指定查询条件等。 4. 修改和删除视图:学习如何修改和删除已存在的视图。了解使用ALTER VIEW和DROP VIEW命令来修改和删除视图的语法和用法。 5. 创索引:学习如何创索引。了解使用CREATE INDEX语句来定义索引的语法和参数,包括指定要创索引的列、选择索引类型等。 6. 修改和删除索引:学习如何修改和删除已存在的索引。了解使用ALTER INDEX和DROP INDEX命令来修改和删除索引的语法和用法。 7. 优化使用视图索引的查询:学习如何优化使用视图索引的查询操作。了解如何合理地选择视图索引的使用情景,以及如何根据查询需求进行性能优化。 8. 实践和练习:通过实际的练习和项目实践,加深对视图索引的理解和应用。自己动手创、修改和删除视图索引,进行查询操作和性能测试。 这些步骤可以帮助你系统地学习MySQL中的视图索引议在学习过程中结合官方文档、参考书籍和在线资源,以及进行实际的练习和实践,加深理解和掌握。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值