Mysql性能优化——索引

对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢。

一、测试:创建一个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

对于大容量的数据表,生成全文索引是一个非常消耗时间和硬盘空间的做法。

查看索引

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180812G0S7ZL00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券