基本原理

索引(INDEX):帮助MySQL高效获取数据的数据结构
PS:索引本身很大,不可能全部存储在内存中,往往以索引文件的形式存储在磁盘上
优点:提高检索效率,降低数据库的IO成本;降低了排序成本,减少CPU消耗
缺点:占用空间,在写入数据时加大了开销

索引结构
B树 (每个结点都包含指向数据指针) 效率高,但对内存开销大,每次查询缺页时都会加载较多数据
B+树 (只有叶子结点包含指针) 效率较低,对内存开销小,缺页时加载结点数据少
所以MySQL一般使用B+ 树的索引结构

聚簇索引:是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序,规定数据在表中的物理存储顺序,因此一个表只能包含一个聚簇索引。但该索引可以包含多个列(组合索引)
非聚簇索引:索引顺序与数据物理排列顺序无关叶级页指向表中的记录,记录的物理顺序与逻辑顺序没有必然的联系。

分类:单值索引、唯一索引、主键索引、复合索引
复合索引:建立多个索引, 复合索引是分层的(多个平衡树相关联),在命中字段的时候是依次命中(左到右)

TIPS:有关MYISAM引擎和INNODB引擎索引的区别
MyISAM:使用B+TREE作为索引结构,叶节点data域存放数据记录的地址,主索引和其它索引结构上并无区别,数据文件和索引文件是分开的
INNODB:使用B+TREE作为索引结构,叶节点data域存放了完整的数据记录,其它索引data域存储主索引对应的值,数据文件本身就是索引文件,要求表必须有主键,若未指定,会自动选择一个列或生成一个隐含字段

语法

①创建
CREATE [UNIQUE] INDEX 索引名(一般为idx_)ON 表名(列名)

TIPS:可以使用ALTER、ADD关键字来添加索引
ALTER TABLE 表名 ADD PRIMARY KEY/UNIQUE/INDEX/FULLTEXT(全文索引) 索引名(列名)
PS:此处也可使用添加表级约束时的方法:ADD [CONSTRAINT pk/uq/ck(约束名)] 约束类型(列名),会自动建立(主键,外键,唯一)索引

②显示
SHOW INDEX FROM 表名\G

③删除
DROP INDEX 索引名 ON 表名
需要建立索引的情况:
主键自动创建唯一索引、频繁查询建索引、与外表关联建索引、组合索引性价比更高
排序的字段、统计或分组的字段
不需建立索引:表记录小、经常增删改、WHERE用不到、过滤性不好

Ps:索引存储在information_schema数据库的STATISTICS表中,主要字段(TABLE_SCHEMA 数据库名,TABLE_NAME 表名,INDEX_NAME 索引名)

MySQL之Index(索引)相关推荐

  1. mysql gis index 索引原理_从原理到优化,深入浅出数据库索引

    MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 数据库查询是数据库的最主要功能之一,我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的 ...

  2. 【MySQL】MySQL show index 索引信息

    1.概述 Non_unique 如果索引不能包括重复词,则为0.如果可以,则为1. Key_name 索引的名称. Seq_in_index 索引中的列序列号,从1开始. Column_name 列名 ...

  3. MYSQL force index索引优化

    mysql索引优化一直以来是DBA和开发人员长期坚持的一项基本工作,合理的索引对于业务来说非常重要,合理的索引能有效改善性能.因此在开发中,定期排查索引的有效性很重要,排查的根据就是历史sql,排查的 ...

  4. mysql gis index 索引原理_Mysql 索引原理及优化

    Mysql 索引原理及优化 什么是索引 为什么需要索引? 索引是数据表种一个或者多个列进行排序的数据结构 索引能够大幅提升检索速度 创建.更新索引本身也会耗费空间和时间 查找结构进化史 线性查找:一个 ...

  5. MySQL force Index 强制索引概述

    以下的文章主要介绍的是MySQL force Index  强制索引,以及其他的强制操作,其优先操作的具体操作步骤如下:我们以MySQL中常用的hint来进行详细的解析,如果你是经常使用Oracle的 ...

  6. mysql index 使用方法_mysql index索引使用方法

    索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行.表越大,花费的时间越多.如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜 ...

  7. 【实施工程师之家】——mysql四种索引PRIMARY(主键索引)、INDEX(一般索引)、UNIQUE(非空索引)、FULLTEXT(全文索引)应用

    mysql四种索引PRIMARY(主键索引).INDEX(一般索引).UNIQUE(非空索引).FULLTEXT(全文索引)应用 目录 1)PRIMARY: 2)NORMAL: 3)UNIQUE: 4 ...

  8. MySQL基础(六)-索引(index)详解

    目录 一.什么是索引? 二.索引的实现原理 三.在MySQL中,主键.unique字段上会自动添加索引. 四.索引的创建与删除 创建索引: 删除索引: 五.查看SQL语句是否使用了索引 六.索引的失效 ...

  9. mysql 索引index_MySQL查询优化之 index 索引的分类和使用

    索引的分类 主键索引 (PRIMARY KEY) 唯一的标识符, 主键不可重复, 只能有一列作为主键 唯一索引 (Unique KEY) 避免重复的列出现, 唯一索引可以重复, 多个列都可以标识为唯一 ...

最新文章

  1. C语言经典例20-小球反弹高度问题
  2. 重新认识错过(通向财富自由之路学习笔记十四)
  3. JavaScript观察者模式
  4. php td内容换行,table单元格内容过多换行显示
  5. 结对编程 黄金点游戏
  6. linux spi驱动分析 三,Linux下SPI驱动分析
  7. 字符串处理 百度之星资格赛 1002 列变位法解密
  8. OSX下解决PIL的IOError: decoder jpeg not available 问题
  9. C# Sql 触发器
  10. scrot usage
  11. Windows7 下载android源码
  12. Oracle alter 语句用法
  13. html读写txt文件,JS读写文本文件示例代码
  14. 小米 admob广告 ID_3月产品更新如何做好再营销广告归因!
  15. Springboot入门手册
  16. Redis复习记录(二):数据类型与基本操作
  17. 搜狐新浪ip库查询接口的使用
  18. CentOS7设置GRUB系统内核开机选单
  19. 如何自学Axure(0基础入门教程)
  20. python爬取微博内容_Python 爬虫如何机器登录新浪微博并抓取内容?

热门文章

  1. Java Generics示例教程 - 通用方法,类,接口
  2. 使用kubeadm安装Kubernetes
  3. Centos7内核版安装nginx环境问题及解决方法
  4. cesium 雷达扫描(附源码下载)
  5. C#LeetCode刷题之#367-有效的完全平方数(Valid Perfect Square)
  6. linux之ssh使用与配置
  7. db2 本地db 到实例_如何登录到FreeCodeCamp的本地实例
  8. 我从机器人先生那里了解到了有关InfoSec的全部信息
  9. python 创建文件夹1003python 创建文件夹_在python中创建动态文件名
  10. golang的channel机制