mysql笔记二
数据库中的对象
索引
索引是数据库随机检索的常用手段,它实际上就是记录的关键字与其相应地址的对应表。
索引之所以能加快查询速度,是因为索引文件只有两个字段。一个是排序后的索引宇段,用于快速查找:另一个是该记录在数据表中的记录号,用于定位读取。这样索引文件的大小就要比数据表小得多,并且使用二分法对索引字段进行查找,从而比无索引时的顺序查找速度要快得多。
索引的作用可归纳为:
- 可以加快数据的检索速度;
- 唯一索引可以保证数据记录的唯一性:
- 在使用排序和分组进行数据查询时,可以显著减少查询中排序和分组的时间;
- 在进行连接查询时可以加快表与表之间的连接,这在实现数据的参照完整性方面有特别的意义。
注意
建立索引是加快表的查询速度的有效手段。SOL 语句支持用户根据应用环境的需要在基本表上建立一个或多个索引,以提供多种存取路径。一般说来,建立与删除索引由数据库管理员或表的属主负责完成。DBMS 在存取数据时会自动选择合适的索引作为存取路径,用户不必也不能人为选择索引。
虽然索引可以提高数据的查询效率,但它会占用一定的存储空间,并且为了维护索引的有效性,在向表中插人、删除或者更新数据时,数据库还要自动执行额外的操作来维护索引。随着数据量的增加,创建和维护索引所消耗的时间也会随之而增加。因此,使用索引时,应综合考虑它的优缺点来科学地设计,才能提高数据库的性能。
索引分类
- 普通索引
普通索引是 MySQL 中的基本索引类型。它允许索引字段有重复值和空值,由关键字 KEY或INDEX 定义,可以创建在任何数据类型中。普通索引的唯一任务是加快对数据的访问速度。 - 唯一索引
唯一索引由关键字 UNIOUE 定义,要求索引字段的值不能重复,但允许为空值。创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。另外 MySQL 中的主键索引是一种特殊的唯一索引,它不允许有空值。 - 全文索引
全文索引是由 FULLTEXT 定义的索引,是指在定义索引的字段上支持值的全文查找。该索引类型允许在索引字段上插人重复值和空值,它只能创建在 CHARVARCHAR或TEXT 等字符类型的字段上。 - 空间索引
空间索引是由 SPATIAL 定义的索引,是只能在 CEOMETRY、POINTLINESTRING 和POLYGON 等空间数据类型的字段上建立的索引。需要注意的是,创建空间索引的字段,必须将其声明为 NOT NULL。 - 单列索引
单列索引指在表中单个字段上创建的索引。它可以是普通索引、唯一索引或者全文索引,只要保证该索引关键字为表中的一个字段即可。 - 多列索引
多列索引指在表中多个字段上创建的索引。只有在查询条件中使用了这些字段中的第一个字段时,该索引才会被使用。例如已在“成绩表”上建立了以“学号”和“课程编号”两个字段为索引字段的多列索引,那么只有在查询条件中使用了“学号”字段时,该索引才会被使用。
索引的设计原则
- 索引并非越多越好
一个表中如有大量的索引,不仅占用磁盘空间,而且会影响INSERT、UPDATE、DELETE 等语句的性能。因为在更改表中的数据的同时,索引也会被DBMS 自动地进行调整和更新。对经常查询的字段应该建立索引,但要避免对不必要的字段建立索引。 - 避免对经常更新的表建立过多的索引
需要经常更新数据的表应该避免建立过多的索引,并且索引中的字段要尽可能少,这样系统消耗在索引维护上的代价才小。 - 数据量小的表不建议使用索引
当数据量较少时,花费在查询上的时间可能比遍历索引的时间还要短,索引可能不会产生优化的效果 - 在取值重复率较大的字段上不要建立索引
例如“教师表”中的“性别”字段,其取值基本只有“男”和“女”两个值,这样的字段就无须建立索引。建立索引后不但不会提高查询效率,反而会严重降低更新速度。 - 为经常需要进行排序、分组和连接查询的字段建立索引
在关系数据中进行排序、分组和连接查询时,需要进行大量的查找比较运算,所以应该为频繁进行排序或分组的字段和经常进行连接查询的字段创建索引。
视图
- 视图是一个虚拟表(逻辑表);
- 视图中的行和列的数据来自一到多张物理表,也可以来源自其他视图;
- 可以通过视图进行增删改查;
- 如果通过视图进行增删改,那么物理表的数据也会随之做出同样的增删改;反之亦然。
- 视图的使用比较少,起码相对于一般SQL来说,不在一个数量级上;
- 视图是一种”虚表”,所以不能与已经存在的表重
视图通常用来实现以下三种功能:
- 筛选出基表中的频繁操作的数据供用户简单地按视图名访问
- 只提供必要的数据视图,防止未经许可的用户访问敏感数据
- 将多个物理数据表抽象为一个逻辑数据表
视图的主要功能:
- 视图能够简化用户的操作。
视图使用户可以将注意力集中在自己关心的数据上如果这些数据不是直接来自于基表,则可以通过定义视图,使得用户眼中的数据结构简单、清晰,并且可以简化用户的数据查询操作。例如,那些来源于若干张表连接查询的视图,就将表与表之间的连接操作对用户隐藏了起来。换句话说,用户所做的只是对一个虚表的简单查询,而这个虚表是怎样得到的,用户无需了解。 - 视图使用户能从多种角度看待同一数据。
视图机制使不同的用户能以不同的方式看待同一组数据。当不同用户使用同一个数据库时,这种灵活性是非常重要的。 - 视图能够实现数据库的逻辑独立性。
数据的逻辑独立性是指当数据库的逻辑结构改变时(如给基表增加了新的字段),用户和应用程序可以不受影响地继续使用数据。 - 视图能够对机密数据提供安全保护。
有了视图机制,就可以在设计数据库应用系统时,对不同的用户定义不同的视图,并设置不同的权限,使机密数据不出现在不应看到这些数据的用户视图上。
存储过程
在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用存储过程。
存储过程的作用主要有以下几方面:
- 存储过程提高了程序设计的灵活性。
存储过程可以使用流程控制语句组织程序结构,方便实现结构较复杂的程序的编写,使设计过程具有很强的灵活性。 - 存储过程实现了程序的模块化。
存储过程作为一个整体被创建后,可以被其他程序多次反复调用。对于数据库设计人员,可以根据实际情况,对存储过程进行维护,不会对调用程序产生不必要的影响。 - 存储过程有利于提高程序的执行速度。
存储过程中包含的大量 SQL 代码或者要被反复执行的代码段在执行之前已经被预编译,所以不会像批处理那样在每次运行之前都要进行编译,从而提高了这些代码段的执行速度。 - 使用存储过程能减少网络访问的负荷。
在访问网络数据库的过程中,当调用存储过程时,仅需在网络中传输调用语句及其必要的参数即可,而不需要传输大量的语句,从而大大减少了网络的流量和负载。 - 存储过程可被作为一种安全机制来充分利用。
系统管理员可以充分利用存储过程对相应数据的访问权限进行限制,从而避免非授权用户的非法访问,进一步保证数据访问的安全性。
触发器
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XXX17的个人博客!