视图

基本概念

视图本身是一张虚拟表,不存放任何数据。在使用SQL语句访问视图的时候,获取的数据是MySQL从其它表中生成的,视图和表在同一个命名空间。视图查询数据相对安全,视图可以隐藏一些数据和结构,只让用户看见权限内的数据,使复杂的查询易于理解和使用。

视图用法

1
2
3
-- 基本语法
CREATE OR REPLACE VIEW view_name
AS select_statement

注意事项:表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视图。

视图调用

和MySQL的表查询基本一致,可以使用各种查询条件。

1
SELECT * FROM user_order_view WHERE user_name='Cicada';

查看视图

1
SHOW CREATE VIEW user_order_view ;

修改视图

1
ALTER VIEW view_name AS select_statement ;

删除视图

1
DROP VIEW [IF EXISTS] view_name ;

视图更新

在指定条件允许的情况下,可以通过在视图上操作更新,删除,甚至写入数据,进而更新视图所涉及的相关表。

1
UPDATE user_order_view SET user_name='smile' WHERE id='1';
  • 如果视图定义时使用聚合函数,分组等特殊操作,则无法更新。

  • MySQL不支持在视图上创建触发器。

注意事项

  • MySQL并不支持在视图中创建索引,使用视图的时候可能会引发很多查询性能问题

索引

索引的优缺点

优点

  • 索引大大减小了服务器需要扫描的数据量
  • 索引可以帮助服务器避免排序和临时表
  • 索引对于InnoDB(对索引支持行级锁)非常重要,因为它可以让查询锁更少的元组。

缺点

  • 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存索引文件。
  • 建立索引会占用磁盘空间的索引文件。
  • 如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。
  • 对于非常小的表,大部分情况下简单的全表扫描更高效;

索引创建语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
-- 普通索引
CREATE index index1 on student (id);

-- 唯一索引
CREATE UNIQUE INDEX index2 on student(id);

-- 全文索引
CREATE FULLTEXT INDEX index3 on student(adress(20));

-- 创建单列索引
CREATE INDEX INDEX5 on student(name(10));

-- 联合索引
CREATE INDEX INDEX6 ON student (name,id);


-- 普通索引
ALTER TABLE student ADD INDEX index1(id);

-- 唯一索引
ALTER TABLE student ADD UNIQUE INDEX index2(id);

-- 全文索引
ALTER TABLE student add FULLTEXT INDEX index3 (NAME(20));

-- 单列索引
ALTER TABLE student ADD INDEX index4 (adress(20));

-- 联合索引
ALTER TABLE student ADD INDEX INDEX5 (name,id);