第十六章: 利用索引改善性能
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;
第二十章: 创建和使用视图及异名
视图是一个虚拟表,它只保存在内存里,不占实际的存储空间,不保存数据,它只是从表里引用数据,它的使用方式和表是一样的.
- 视图的使用场景
- 简化数据访问
有时候数据在表里的格式并不适合终端查询,这时可以创建一系列的视图. - 作为一种安全策略
视图可以限制用户只访问表里特定字段或满足一定条件的记录. - 维护摘要数据
如果摘要数据所基于的表经常更新,那么使用视图要比每次都写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;
-
WITH CHECK OPTION
这个用的不是很多.它像是一种约束.如果在创建视图的适合使用了这个选项,那么当向表中插入或者更新的记录不符合视图的条件时则操作失败. -
删除视图
跟删除表一样,使用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 ;
可以不添加所有者的名字就能访问这个表。