对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢。
一、测试:创建一个tb1表,向表中插入20000行数据,如下图:
开始测试,查询stuname=’admin’的记录
(1)stuname列上没有创建索引的情况
注:explain可以查看执行计划
(2)stuname列上创建索引的情况
在查找stuname=‘admin’的记录时,如果stuname上已经建立了索引,mysql无须扫描全表,即准确可找到该记录。相反,mysql会扫描所有记录。所以在数据库表中,对字段建立索引可以大大提高查询速度。
索引是在存储引擎中实现的,而不是在服务器层中实现的。
所以并不是所有的存储引擎都支持所有的索引类型。
二、索引的分类
索引是帮助mysql高效获取数据的数据结构。它的存在形式是文件。索引能够帮助我们快速定位数据。好比是一本书的目录,能加快数据库的查询速度。
索引的数据结构(B-tree索引的结构):
1、使用索引产生的代价:
(1)索引本身是以文件的形式存放在硬盘的,所以添加索引会增加磁盘的开销。
(2)写数据,需要更新索引,对数据库是个很大的开销,降低表更新、添加和删除的速度。
2、索引的类型:
索引包括单列索引和组合索引。
单列索引:即一个索引只包含单个列,一个表可以有多个单列索引,但不是组合索引。
组合索引:即一个索引包含多个列。
(1)普通索引
是最基本的索引,没有任何限制
(2)唯一索引
索引列的值必须唯一,但允许空值,空值是指null。
(3)组合索引
例:创建一个表,包含如下字段
建立这样的组合索引,相当于分别建立了下面三组组合索引:
Username,city,age username,city username
因为组合索引“最左前缀”的结果,所以没有city,age这样的结果。
例如以下sql就会用到组合索引
而下面的则不会用到:
注:我们在创建索引时应该将最常用作限制条件的列放在最左边,依次递减。
(4)全文索引
只用于MyISAM表对文本域进行索引。字段类型包括char、varchar、text
对于大容量的数据表,生成全文索引是一个非常消耗时间和硬盘空间的做法。
查看索引
领取专属 10元无门槛券
私享最新 技术干货