MySQL——索引
MySQL索引的概念
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,通俗来讲索引就好比书本的目录,加快数据库的查询速度。
举个简单的例子,见下图:

注意:此例子的中索引结构与数据库中的索引结构差距很大
user表有3个字段(id、name、age),存储8条记录,当我们查找age为20的记录时,sql语句 select * from user where age=20;
1 在没有索引情况下需要依次遍历表里的记录,第6次时找到age=20的记录;
2 如果我们在age列添加索引,只需3次,就可以找到age=20的记录。
正如官方所说:索引是一个数据结构;
通过语句show index from tablename查看索引

可以根据Index_type看出该索引由BTREE数据结构实现;除了BTREE,还有HASH、FULLTEXT、RTREE;
索引的作用
- 提高查询效率
- 消除数据分组、排序
- 避免“回表”查询(索引覆盖)
- 优化聚合查询
- 用于多表JOIN关联查询
- 利用唯一性约束,保证数据唯一性
- InnDB行锁实现
索引的副作用
- 增加I/O成本
- 增加磁盘空间
- 不合适的索引或索引过多,会降低增删改的效率
索引的分类
1 存储结构
- BTREE:InnoDB & MyISAM
- HASH:HEAP,NDB,InnoDB AHI
- Fractal Tree:TokuDB
- RTREE
- FULLTEXT
2 数据的存储方式
- 聚集索引:聚簇索引的顺序就是数据的物理存储顺序,索引与数据存放在同一个文件中。
- 非聚集索引:非聚簇索引的顺序与数据的物理存储顺序不同,索引与数据存放在不同的文件。
3 应用层次
- 单列:主键索引、唯一索引、普通索引
- 多列:复合索引
MySQL——索引的更多相关文章
- 深入MySQL索引
MySQL索引作为数据库优化的常用手段之一在项目优化中经常会被用到, 但是如何建立高效索引,有效的使用索引以及索引优化的背后到底是什么原理?这次我们深入数据库索引,从索引的数据结构开始说起. 索引原理 ...
- MySQL 索引
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是 ...
- MYSQL索引结构原理、性能分析与优化
[转]MYSQL索引结构原理.性能分析与优化 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页 ...
- MySQL索引原理及慢查询优化
原文:http://tech.meituan.com/mysql-index.html 一个慢查询引发的思考 select count(*) from task where status=2 and ...
- 【转】MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- [转]MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- MySQL索引类型总结和使用技巧以及注意事项
索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable ...
- MySQL索引背后的数据结构及算法原理【转】
本文来自:张洋的MySQL索引背后的数据结构及算法原理 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持 ...
- mysql索引总结----mysql 索引类型以及创建
文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...
- Mysql 索引实现原理. 聚集索引, 非聚集索引
Mysql索引实现: B-tree,B是balance,一般用于数据库的索引.使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度.而B+tree是B-tree的一个变种,My ...
随机推荐
- 【网络安全】telnet 登陆远程服务器
• 实验环境: a. Vmware 14 PRO b. windows 7 x64 客户机 c. windows server 2008 R2 x64 服务器 ...
- SQL语句优化 学习笔记
sql语句时间花在哪了? 1 等待时间 2 执行时间 这两个时间并非孤立的,单条语句执行的快 其他语句等待的时间就少 执行时间花在哪了? 1 查找 沿着索引查找 慢者可能全表扫描 2 取出 查到行后, ...
- CentOs7 防火墙的开放与关闭及端口的设定
1.查看firewall服务状态 systemctl status firewalld 2.查看firewall的状态 firewall-cmd --state 3.开启.重启.关闭.firewall ...
- gulp.js实现less批量实时编译
问题描述: 在之前一直用Koala编译less文件,但本人感觉Koala用起来非常麻烦,好像不能做多个less文件的批量的编译:因为目前项目也没有用到webpack,我的less是通过vs code ...
- CentOS7 yum安装配置 +redis主从配置
一.安装必要包 yum install gcc 二.linux下安装 #下载 wget http://download.redis.io/releases/redis-3.0.0.tar.gz tar ...
- ajax传输数组类型的参数
$.ajax({ type:"post", traditional: true, data:{arr:arr}, url:"${pageContext.request.c ...
- mysql查看库、表占用存储空间大小
http://blog.csdn.net/bzfys/article/details/55252962 1. 查看该数据库实例下所有库大小,得到的结果是以MB为单位 <span class=&q ...
- Django学习系列6:使用selenium测试用户交互
学习系列5中的单元测试有报错信息,这儿来编写functional_tests.py文件,扩充其中的功能测试 # File: functional_test.py # Author: Rxf # Cre ...
- u-boot bl _main分析
ldr r0, =(CONFIG_SYS_INIT_SP_ADDR): #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INIT_RAM_ADDR ...
- idea控制台搜索框
https://blog.csdn.net/honnyee/article/details/82772948