什么是索引?
索引就是一个
指向表中数据的指针。数据库中的索引与图书索引十分类似,其实就是我们小学时使用的中华字典的目录,这就是索引。
举例来说,如果想查阅书中关于某个主题的内容,我们会首先查看索引,索引会以字母顺序列出全部主题,标明一个或多个特定的书页号码。索引在数据库中也起到这样的作用,指向数据在表中的准确物理位置。
实际上,我们被引导到数据在数据库底层文件中的位置,但从表面看来我们引用的是一个表。
索引的优势?
速度快
在查找信息时,查看索引来获取信息所在的准确页码比逐页查找所需信息的速度更快。
使用索引的情况?
数据更多
例如书本很厚的话,用索引来查询会快很多,如果书本本身就薄,就无需用索引了,直接全页翻找,相对来说速度更快,也无需再新加页面来存储索引了。
不适用使用索引的情况?
1、索引不适合用于小规模的表。因为查询索引会增加额外的查询时间。对于小规模的表,使用搜索引擎进行全表扫描会更快。
2、当字段在查询的WHERE子句中用作过滤条件,并返回表中的大部分记录时,该字段就不适合设置索引。
3、
经常会被批量更新的表可以设置索引,但批量操作的性能会由于索引而降低。对于经常会被加载或批量操作的表来说,可以在执行批量操作前删除索引,在完成批量操作之后,在重建索引。
4、这是因为在表中插入新数据后,索引也会被更新,也会造成索引的内存碎片,导致额外的运行和内存的开销。
5、不应该对包含大量NULL值的字段设置索引。
6、经常被操作(增删改)的字段不应该设置索引。维护起来会变得很繁重。
7、字段内容特别长的不适合当索引,因为大量的IO开销会不可避免地降低数据库性能。
索引的类型?
1、单字段索引:对表中单个字段的索引中最简单,最常见的形式。显然,单字段索引是基于一个字段创建的。如果某个字段经常在where子句中作为查询条件,他作为单字段索引是最有效的。
2、唯一索引:唯一索引用于改善性能和保证数据法的完整性。唯一索引不允许表中有重复值,其他的与单字段索引一致。我们只能在唯一字段上建立唯一索引。
3、组合索引:基于表中一个两个或多个字段创建的。在创建组合索引时,我们要考虑性能的问题,因为字段在索引中的次序对数据检索速度有很大的影响。一般来说,具有限制性的值应该排在前面,从而得到最好的性能。
4、隐式索引:是数据库服务器在创建对象时自动创建的。隐式索引通常是为主键约束和唯一性约束自动创建的。
索引是如何工作的?
索引可以记录与被索引字段相关联的值在表中的位置。当用户向表中添加新数据时,索引中也会添加新项。当数据库执行查询时,而且where条件中指定的字段已经设置了索引时,数据库会首先在索引中搜索where子句中指定的值。
如果在索引中找到了这个值,索引就可以返回被搜索数据在表中的准确位置。
![](https://img-blog.csdnimg.cn/direct/03388a9edac247f78b2acf8877963fc9.png)
用no作为索引,也就是“2024001”这样的数据,然后根据索引位置找到表的真正对应位置。
索引知识点一:
索引通常与相应的表分开保存,其主要目的是提高数据检索的性能。索引的创建与删除不会影响到数据本身,但在删除索引后,数据检索的速度会降低。索引也会占据物理存储空间,而且可能还会比表本身还大。
因此在考虑数据库的存储空间时,需要考虑索引占用的空间。
索引知识点二:
索引通常以
一种有序的树形格式来存储信息,因此速度较快。假设我们对一个书名列表设置了索引,这个索引具有一个根节点,也就是每个查询的起始点。根节点具有分支,在本例中可以有两个分支,一个代表字母A到L,另一个代表字母M到Z。如果要查询以字母M开头的书名,我们就会从根节点进入索引,
并且立即转到包含字母M到Z的分支。这种方式可以排除大约1/2的可能性,从而用更短的时间找到准确的书名。
注:批量加载时禁用索引
当用户向数据库提交一个事务时(INSERT,UPDATE,DELETE),表和与这个表相关联的索引中都会有数据变化。这意味着如果表中有一个索引,而用户更新了表,那么相关索引也会被更新。在事务环境中,虽然对表的每次写入都会导致索引也被写入,但一般不会产生什么问题。
然而在批量加载时,索引可能会严重地降低性能。批量加载可能包含数百,数千或数百万操作语句或事务。由于规模较大,批量加载需要较长的时间才能完成,而且通常安排在非高峰期使用,一般是周末或夜晚。为了在批量加载期间优化性能(这可能相当于将批量加载所偶徐的时间从12小时缩短为6小时),
最好在加载过程中删除相应表的索引。当相应的索引被删除之后,对表所做的修改会在更短的时间内完成,整个操作也会更快地完成。当批量加载结束之后,我们可以重建索引。在索引的重建过程中,表中适当的数据会被填充到索引。虽然对于大型表来说,创建索引需要一定的时间,但先删除索引再重建,它所需的总时间要更少一些。
在批量加载操作的前后删除并重建索引的方法还有另一个优点,就是可以减少索引中的碎片。当数据库不断增长时,记录被添加,删除和更新,就会产生碎片。对于不断增长的数据库来说,最好定期地删除和重建索引。当索引被重建时,构成索引的物理空间数量减少了,也就减少了读取索引所需的磁盘IO,用户就会更快递得到结果。