首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql性能优化——索引

Mysql性能优化——索引

作者头像
L宝宝聊IT
发布2018-08-16 10:35:15
5070
发布2018-08-16 10:35:15
举报
文章被收录于专栏:L宝宝聊ITL宝宝聊IT

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

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

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

查看索引

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 L宝宝聊IT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档