sql 入门经典(第五版) Ryan Stephens 学习笔记 第五部分: 性能调整

时间:2023-03-09 07:00:59
sql 入门经典(第五版) Ryan Stephens 学习笔记  第五部分: 性能调整

第十六章: 利用索引改善性能

1、 create index

单字段索引:  create index index_name on table_name (column_name);
唯一索引:     create unique index index_name on table_name (column_name);

// 当 某列所有元素中存在相同的值时,创建 unique idnex 会失败。

// 当基于某列创建unique_index 时,插入元素时该列的值和之前的值重复也会报错。

组合索引: 一个表中有两个或者多个字段的索引

  create index index_name on table_name (column1,column2);

2、何时考虑设置索引

3、 drop index index_name on table_name ;      // 删除索引

4、 alter index index_name ;     //修改索引  

5、 查看索引: 某个表中所有的索引,包括primary key

    show index from table_name;

第二十章: 创建和使用视图及异名

  视图是一个虚拟表,它只保存在内存里,不占实际的存储空间,不保存数据,它只是从表里引用数据,它的使用方式和表是一样的.

  1. 视图的使用场景
    • 简化数据访问
      有时候数据在表里的格式并不适合终端查询,这时可以创建一系列的视图.
    • 作为一种安全策略
      视图可以限制用户只访问表里特定字段或满足一定条件的记录.
    • 维护摘要数据
      如果摘要数据所基于的表经常更新,那么使用视图要比每次都写SQL来的方便

  2、创建视图
    MySQL的文档中对创建视图是这样定义的:

    CREATE  [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

    [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

  一个普通的视图创建语句是这样的:

  CREATE VIEW V_CUSTOMERS AS SELECT * FROM V_CUSTOMERS;

    1. WITH CHECK OPTION
      这个用的不是很多.它像是一种约束.如果在创建视图的适合使用了这个选项,那么当向表中插入或者更新的记录不符合视图的条件时则操作失败.
    2. 删除视图
      跟删除表一样,使用DROP可以删除一个视图:
      DROP VIEW V_CUSTOMERS;

  从视图创建视图:

    create table table_name as select column1,colum2 from table_from_view;

3、视图和表的区别和联系 
区别:1、视图是已经编译好的sql语句。而表不是  
      2、视图没有实际的物理记录。而表有。
      3、表是内容,视图是窗口
      4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
      5、表是内模式,视图是外模式
      6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
      7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。 
      8、视图的建立和删除只影响视图本身,不影响对应的基本表。
联系: 视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,

也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。

4、 异名: 表或者视图的另一个名字,访问时可以不适用完整的名字。

  创建异名: create [public | private ] synonym synonym_name for table_name|view_name ;

  删除异名: drop synonym synonym_name;

  应用: select synonym_name ;   == select * from table_name ;

可以不添加所有者的名字就能访问这个表。