一、视图:
1、为什么需要视图
例如经常要对emp和dept表进行连接查询,每次都要做表的连接,写同样的一串语句,同时由于工资列队数据比较敏感,对外要求不可见。对这样的问题就可以通过视图来解决。
2、视图定义
①、视图通过以定制的方式显示来自一个或多个表的数据
②、视图是一种数据库对象,用户可以像查询普通表一样查询视图
③、视图内其实没有存储任何数据,它只是对表的一个查询
④、视图的定义保存在数据字典内,创建视图所基于对表称为“基表”
3、视图的作用优点
作用:
①、控制安全
②、保存查询数据
优点:
①、提供了灵活一致级别安全性。
②、隐藏了数据的复杂性
③、简化了用户的SQL指令
④、通过重命名列,从另一个角度提供数据
4、创建视图
CREATE [OR REPLACE] VIEW 视图名 [(alias[, alias]...)]--为视图字段指定别名
AS subquery [WITH READ ONLY];
5、视图使用规则
①、视图必须有唯一命名
②、在mysql中视图的数量没有限制
③、创建视图必须从管理员那里获得必要的权限
④、视图支持嵌套,也就是说可以利用其他视图检索出来的数据创建新的视图
⑤、在视图中可以使用OREDR BY,但是如果视图内已经使用该排序子句,则视图的ORDER BY将覆盖前面的 ORDER BY。
⑥、视图不能索引,也不能关联触发器或默认值。
⑦、视图可以和表同时使用
6、修改视图
使用CREATE OR REPLACE VIEW 语句修改EMP_V_10 视图,为每个列指定列名
CREATE OR REPLACE VIEW emp_v_10
(id, name, sal, dept_id)
AS SELECT id,name,
salary, dept_id
FROM employees
WHERE dept_id = 10;
如果视图存在,需要修改视图,则添加or replace,否则会报视图存在错误
7、 删除视图
DROP VIEW view_name;
删掉视图不会导致数据的丢失,因为视图是基于数据库的表之上的一个查询定义
二、索引:
索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。索引是提高数据库性能的重要 方式。MySQL中,所有的数据类型都可以被索引。MySQL的索引包括普通索引、惟一性索引、全文索引、单列 索引、多列索引和空间索引等。
1、什么是索引
模式(schema)中的一个数据库对象 在数据库中用来加速对表的查询 通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O 与表独立存放,但不能独立存在,必须属于某个表 由数据库自动维护,表被删除时,该表上的索引自动被删除。 索引的作用类似于书的目录,几乎没有一本书没有目录,因此几乎没有一张表没有索引。
2、索引优缺点
索引的优点是可以提高检索数据的速度,这是创建索引的最主要的原因;对于有依赖关系的子表和父表之间的 联合查询时,可以提高查询速度;使用分组和排序子句进行数据查询时,同样可以显著节省查询中分组和排序 的时间。 索引的缺点是创建和维护索引需要耗费时间,耗费时间的数量随着数据量的增加而增加;索引需要占用物理空 间,每一个索引要占一定的物理空间;增加、删除和修改数据时,要动态的维护索引,造成数据的维护速度降 低了。
3、索引分类
MySQL的索引包括普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引等
4、索引的设计原则
为了使索引的使用效率更高,在创建索引的时候必须考虑在哪些字段上创建索引和创建什么类型的索引。
①、选择惟一性索引
②、为经常需要排序、分组和联合操作的字段建立索引
③、为常作为查询条件的字段建立索引
④、限制索引的数目
⑤、尽量使用数据量少的索引
⑥、尽量使用前缀来索引
⑦、删除不再使用或者很少使用的索引
5、创建索引
创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。创建索引有三种方
式,这三种方式分别是创建表的时候创建索引、在已经存在的表上创建索引和使用ALTER TABLE语句来
创建索引。
创建表的时候可以直接创建索引,这种方式最简单、方便。
例:
Create table index1(
Id int,
Name varchar(20),
Sex boolean,
Index(id)
);
Show create table index1 \G
Explain select * from index1 where id=1 \G
在已经存在的表上创建索引
create index CREATE [ UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 ON 表名 (属性名 [ (长度) ] [ ASC | DESC] );
用ALTER TABLE语句来创建索引
ALTER TABLE 表名 ADD [ UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名(属性名 [ (长度) ] [ ASC | DESC]);
查询索引:
show index from 表名称[from db_name];
查询索引的执行情况:
explain select * from t_hero where ind =1
6、删除索引
删除索引是指将表中已经存在的索引删除掉。一些不再使用的索引会降低表的更新速度,影响数据库的性能。 对于这样的索引,应该将其删除。
DROP INDEX 索引名 ON 表名 ;