MySQL:视图与索引

一、视图

视图是 虚拟的表 。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。即检索出来的数据按照视图定义的格式来进行显示。

(一)创建视图

CREATE VIEW view_name AS select_statement;
select stuName,couName,credit from student,course,score 
where student.stuId = score.stuId 
and score.couId = course.couId;

该查询涉及到三个表的联结,where 条件子句,比较复杂。可以使用视图来简化该操作。
创建视图:

create view stuScore as
select stuName,couName,credit from student,course,score
where student.stuId = score.stuId 
and score.couId = course.couId;

直接对视图进行select语句查询:

select * from stuScore;

直接对视图进行select语句查询和之前的联表查询效果一样,但更简洁。
对视图进行条件查询:

select * from stuScore where couName = 'c#';

对视图进行分组操作:

select stuName cast(sum(credit) as decimal(9,3)) 
as totalScore from stuScore group by stuName;
创建视图时,若视图存在,可以先使用drop再用create,也可以直接使用create or replace view。如果创建的视图不存在,则第二种方法会创建一个视图,如果要创建的视图存在,则第二种方法会替换掉原有的视图。
视图中的数据是否可以更新,视情况而定。
若视图的定义中包含以下操作,则不能通过视图更新数据:
  • 分组(group by 和 having)
  • Distinct
  • 导出(计算)列
  • (二)删除视图

    DROP VIEW view_name;
    

    (三)使用视图的好处

  • 视图能简化用户操作
  • 视图使用户能以多种角度看待同一数据
  • 视图对重构数据库提供了一定程度的逻辑独立性
  • 视图能够对机密数据提供安全保护
  • 适当的利用视图可以更清晰地表达查询
  • 索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。索引是提高数据库性能的重要方式。MySQL中,所有的数据类型都可以被索引。MySQL的索引包括普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引等。
    索引的优点是可以提高检索数据的速度,这是创建索引的最主要的原因;索引的缺点是创建和维护索引需要耗费时间,耗费时间的数量随着数据量的增加而增加。

    (一)创建索引

  • 创建表时创建索引
  • CREATE TABLE 表名 (属性名 数据类型 [完整性约束条件],
    属性名 数据类型 [完整性约束条件],...属性名 数据类型
    [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY
    [别名](属性名1 [(长度)] [ASC | DESC]));
    
  • 在已经存在的表上创建索引
  • CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名
    ON 表名 (属性名[(长度)] [ASC | DESC]);
    
  • 用ALTER TABLE语句来创建索引
  • ALTER TABLE 表名 ADD [ UNIQUE | FULLTEXT | SPATIAL ] INDEX
    索引名(属性名 [(长度)] [ASC | DESC]);
    

    (二)删除索引

    DROP INDEX 索引名 ON 表名 ;
    

    (三)常见问题及解答

  • MySQL中索引、主键和惟一性的区别是什么?
  • 索引建立在一个或几个字段上,建立了索引后,表中的数据就按照索引的一定规则排列。这样可以提高查询速度。
    主键是表中数据的唯一标识。不同的记录的主键值不同。在建立主键时,系统会自动建立一个唯一性索引。
    唯一性是建立在表中一个或者几个字段上。其目的是为了对于不同的记录,具有唯一性的字段的值是不同的。