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

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

查看索引

原文发布于微信公众号 - L宝宝聊IT(gh_b0e552aa80db)

原文发表时间:2018-08-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ImportSource

锁系列-Mysql中的锁

在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。 目录: 1、行级锁、表级锁、页级锁 2、共享锁和排它...

376150
来自专栏杨建荣的学习笔记

MySQL和Oracle的添加字段的处理差别 (r10笔记第73天)

昨天在微信群中有个朋友也是无意中问了一下,说数据库中的表字段想保持一种相对规范的顺序,怎么办?要知道Oracle中这个操作就比较纠结了,因为是按照追加的方式来处...

37460
来自专栏互联网技术栈

MySQL 锁机制——必知必会

MyISAM表的读和写是串行的,但这是就总体而言的。在一定条件下,MyISAM表也支持查询和插入操作的并发进行。

15660
来自专栏PHP在线

Mysql存储引擎中InnoDB与Myisam的区别

1. 事务处理innodb 支持事务功能,myisam 不支持。 Myisam 的执行速度更快,性能更好。 2. select ,update ,insert...

32150
来自专栏lgp20151222

mysql explain 的extra中using index ,using where,using index condition,using index & using where理解

using where:查找使用了索引,不需要回表去查询所需的数据,查询结果是索引的一部分

16910
来自专栏数据和云

深入解析:你听说过Oracle数据库的更新重启动吗?

杨廷琨 云和恩墨高级咨询顾问, ITPUB Oracle 数据库管理版版主 ,人称 “杨长老”,十数年如一日坚持进行 Oracle 技术研究与写作,号称 ...

9740
来自专栏禅林阆苑

mysql学习总结08 — 优化(设计层)-索引与分区分表

普通索引:(index) 对关键字没有要求,如果一个索引在多个字段提取关键字,称为复合索引

1K400
来自专栏杨建荣的学习笔记

MySQL Online DDL(二)(r11笔记第88天)

对于Online DDL,之前简单分析了一些场景MySQL中的Online DDL(第一篇)(r11笔记第3天),其实有一个很关键的点没提到,那就是online...

37290
来自专栏杨建荣的学习笔记

关于primary key和unique index的奇怪问题 (58天)

今天一个dba交给我一个问题,让我帮忙查一下。说有个脚本运行的时候有错,让我看看是什么原因。 脚本的思路如下: 先drop PK,FK之类的constraint...

304120
来自专栏ytkah

dedecms清空所有文章怎么操作?sql语句如何写?

  小C新建了一个站,确切的说是复制,出于seo考虑,决定清空所有文章,那么dedecms清空所有文章怎么操作?sql语句如何写呢?特别提醒:修改之前一定要先做...

30690

扫码关注云+社区

领取腾讯云代金券