MySQL 视图与索引
视图
基本概念
视图本身是一张虚拟表,不存放任何数据。在使用SQL语句访问视图的时候,获取的数据是MySQL从其它表中生成的,视图和表在同一个命名空间。视图查询数据相对安全,视图可以隐藏一些数据和结构,只让用户看见权限内的数据,使复杂的查询易于理解和使用。
视图用法
1 | -- 基本语法 |
注意事项:表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视图。
视图调用
和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 | -- 普通索引 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 H52E5!
评论