索引的特点及分类

一.背景
学习了MySql的基本语句之后只是掌握了一个基本,但是想要对数据库有更高级的认识和了解,就还需要学习索引。

二.概念
先来说说索引的概念。索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。

三.存储类型
MySQL中的索引的存储类型有两种:BTREE、HASH。

四.优点和缺点
优点:
1. 可以大大加快数据的查询速度
2. 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
3. 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
4. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
5. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
缺点:
1.创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
2.索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值。
3.当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。

五.使用准则
索引并不是越多越好,对每个字段都建立索引更是不对的,需要在实际工作中根据需要合理的使用。
以下情况建议用索引:
1.对经常用于查询的字段应该创建索引。
2.在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。
3.在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
4.在经常用在连接的列上创建索引,这些列主要是一些外键,可以加快连接的速度。
5.在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构。
以下情况不建议用索引:
1.经常增、删、改的表就避免对其进行过多的索引。
2.数据量小的表最好不要使用索引,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。
3.对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
4.当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。

六.索引的分类
索引分为:单列索引(普通索引、唯一索引、主键索引)、组合索引、全文索引和空间索引。
1.单列索引
一个索引只包含单个列,但一个表中可以有多个单列索引。
(1)普通索引
MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。
(2)唯一索引
索引列中的值必须是唯一的,但是允许为空值。
(3)主键索引
是一种特殊的唯一索引,不允许有空值
2.组合索引
在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。
3.全文索引
只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,介绍了要求,说说什么是全文索引,就是在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行
4.空间索引
空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有四种,GEOMETRY、POINT、LINESTRING、POLYGON。在创建空间索引时,使用SPATIAL关键字。要求引擎为MyISAM,创建空间索引的列,必须将其声明为NOT NULL。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值