一文快速入门 MySQL 索引

本文首发于 https://antoniopeng.com

什么是索引

MySQL 官方对索引的定义:索引(Index)是帮助 MySQL高效获取数据的数据结构。因此 索引的本质就是数据结构。索引的目的在于提高查询效率,可类比字典、书籍的目录等这种形式。

可简单理解为 排好序的快速查找数据结构。在数据之外,数据库系统还维护着 满足特定算法查询的数据结构,这些数据结构以某种方式指向数据。这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

一般来说,索引比较大,不可能全部存储在内存中,因此索引往往以 索引文件 的形式存储在磁盘上。

平常所说的索引,如果没有特别指明,都是 B 树索引。其中聚集索引、次要索引、覆盖索引、前缀索引、唯一索引默认都是用 B 树。

可以通过命令 show index from table_name 查看表的索引情况

索引的优缺点

优点

  • 类似于大学图书馆的书目索引,提高数据的检索效率,降低数据库的 IO 成本
  • 通过索引列对数据进行排序,降低数据的排序成本,从而降低 CPU 的消耗

缺点

  • 索引实际上也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也要占用空间
  • 虽然索引大大提高了查询效率,但是降低了更新表的速度,如 insert、update 和 delete 操作。因为更新表时,MySQL 不仅要保存数据,还要保存索引文件每次更新的索引列字段,并且在更新操作后,会更新相应字段索引的信息
  • 索引只是提高查询效率的一个因素,如果你的 MySQL 有大量的数据表,就需要花时间研究建立最优秀的索引或优化查询语句

索引分类

索引主要分为以下三类:

  • 单值索引:一个索引只包含单个列,一个表可以有多个单值索引
  • 唯一索引:索引列的值必须唯一,但允许有空值,主键就是唯一索引
  • 复合索引:一个索引包含多个列

以索引的结构划分为以下四类:

  • BTREE 索引
  • Hash 索引
  • Full-Text 索引
  • R-Text 索引

基本语法使用

创建索引

创建一个普通索引

CREATE INDEX index_name ON table_name (column_name(length))

也可以通过修改表结构的方式来添加索引

ALTER TABLE table_name ADD INDEX index_name (column_name(length))

注:如果是 char、varchar 类型的字段,length 可以小于字段实际长度;如果是blob、text 类型,必须指定 length

其它创建索引的方式

添加主键索引

ALTER TABLE table_name ADD PRIMARY KEY (column_name)

添加唯一索引

ALTER TABLE table_name ADD UNIQUE (column_name)

添加全文索引

ALTER TABLE table_name ADD FULLTEXT (column_name)

添加普通索引

ALTER TABLE table_name ADD INDEX index_name (column_name)

添加组合索引

ALTER TABLE table_name ADD INDEX index_name (column_name_1, column_name_2, column_name_3)

删除索引

DROP INDEX index_name ON table_name

查看索引

SHOW INDEX FROM table_name

需要建立索引的情况

  • 主键自动建立唯一索引
  • 频繁作为 查询条件 的字段
  • 查询中与其它表关联的字段:外键关系建立索引
  • 高并发 下趋向创建 组合索引
  • 查询中 排序 的字段。排序字段若通过索引去访问将大大提高排序速度
  • 查询中 分组 字段

不需要建立索引的情况

  • 表记录太少(数据量太少 MySQL 自己就可以搞定了)
  • 经常增删改的表
  • 数据重复且平均分配的字段,如国籍、性别等
  • 频繁更新的字段不适合建立索引
  • Where 条件里面用不到的字段同样不适合建立索引

原文地址:https://blog.51cto.com/14791564/2487352

时间: 2024-10-29 00:14:29

一文快速入门 MySQL 索引的相关文章

elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)

一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 状态值说明 Green - everything is good (cluster is fully functional),即最佳状态Yellow - all data is available but some replicas are not yet allocated (cluster i

快速入门MySQL教程【转自:http://xpleaf.blog.51cto.com/9315560/1712821】

当时入门MySQL的时候,连数据库是什么都不知道,后来参考了一些网友的博客文章和论坛的帖子,才开始慢慢了解它.下面也是以一种可实际操作的方式来说明MySQL最最基本的使用了. 本篇文章的索引如下: 一.MySQL数据库的安装 1.Windows下的安装 2.Linux下的安装 3.MAC下的安装 二.开始使用MySQL数据库 0.简单理解MySQL数据库 1.在命令行中进入MySQL数据库 2.查看已有的数据库 3.创建自己的数据库 4.选择要操作的数据库 5.在数据库中创建数据库表 6.MyS

一文快速入门Docker

Docker提供一种安全.可重复的环境中自动部署软件的方式,拉开了基于与计算平台发展方式的变革序幕.如今Docker在互联网公司使用已经非常普遍.本文用十分钟时间,带你快速入门Docker. Docker是什么 Docker是什么? 官网首页的介绍: Enterprise Container Platform for High-Velocity Innovation. Securely build, share and run any application, anywhere 百度百科告诉我们

30分钟带你快速入门MySQL教程

这是一篇真正适合初学者的MySQL数据库入门文章,哪怕你从来没有接触过数据库,或者说你从来没有听说过有数据库这东西,请一定要相信我,我当时就是这么过来的. 如果你刚开始接触MySQL数据库,或者你需要使用MySQL数据库来保存一些基本的数据,比如说,用户基本信息.学生基本信息表等,但却不知道何从下手,那么这篇文章就很适合你了,下面通过一个有趣的案例来带你熟悉MySQL的基本指令操作,希望你也能跟着操作,这样之后,相信你肯定就不会觉得很陌生了. 本文力图思路清晰和简洁,虽然有点长,但文字都是非常通

大数据技术之_20_Elasticsearch学习_01_概述 + 快速入门 + Java API 操作 + 创建、删除索引 + 新建、搜索、更新删除文档 + 条件查询 + 映射操作

一 概述1.1 什么是搜索?1.2 如果用数据库做搜索会怎么样?1.3 什么是全文检索和 Lucene?1.4 什么是 Elasticsearch?1.5 Elasticsearch 的适用场景1.6 Elasticsearch 的特点1.7 Elasticsearch 的核心概念1.7.1 近实时1.7.2 Cluster(集群)1.7.3 Node(节点)1.7.4 Index(索引 --> 数据库)1.7.5 Type(类型 --> 表)1.7.6 Document(文档 -->

MySQL快速入门(二)

1 多表关联查询 从快速入门,我们已经学会了如何在一张表中读取数据,这是最基础简单的查询表中的数据,但是在实际中经常需要从多个表中读取数据. 本章我将会向大家介绍如何使用MySQL在多个表中查询数据. 想要从多个表中查找数据,就要用到JOIN关键字 JOIN 按照功能大致分为如下三类: 1.CROSS JOIN(交叉连接) 2.INNER JOIN(内连接或等值连接) 3.OUTER JOIN(外连接) 1.1 交叉连接 交叉连接的关键字:CROSS JOIN                  

MySQL 快速入门

http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html 博客园一位牛人写了一个MySQL快速入门的教程,如果你是MySQL小白但是以后要用到数据库或者想要了解数据库的同学可以了解一下. 本人上个星期五去了一家公司面试数据工程师的实习,被虐得体无完肤,因为压根一点数据库都没有碰过,只能靠一点数据结构的基础蒙了一下选择题.现在后知后觉,开始恶补数据库知识.

JavaWeb之Mysql快速入门(十一)

MySql快速入门 1. mysql简介 Structured Query Language 结构化查询语言 SQL标准,由ANSI(美国标准学会,属于ISO的核心成员)进行管理和维护的. 数据库厂商都支持该标准,并进行了扩展.扩展的部分,一般称之为方言. SQL标准和方言:普通话和方言 作用:与数据库进行交互 常用数据库:Oracle/DB2/MySQL/SQL Server 2. SQL语句的分类 DDL:Data Definition Language数据定义语言 alert/create

mysql存储过程快速入门

一.创建存储过程 创建存储过程(一) create PROCEDURE pro1() BEGIN select 'Hello World'; END; //执行存储过程 call proc1(); 创建存储过程的基本形式 CREATE PROCEDURE sp_name([proc_parameter[,…]]) [characteristic …] routine_body 其中: sp_name:存储过程名称 proc_parameter:存储过程参数,可以为in,out,inout参数,其