从零开始了解MySQL索引
来源:互联网 发布:卡帝乐鳄鱼 知乎 编辑:程序博客网 时间:2024/05/18 01:16
索引是什么
咬文嚼字不一定是坏事,再了解MySQL索引前,我们不妨看看词典中是如何定义索引这个词语的:
根据一定需要,把书刊中的主要内容或各种题名摘录下来,标明出处、页码,按一定次序分条排列,以供人查阅的资料。
这里有几个关键点:
1. 索引的内容是主要内容或题名
2. 索引的具体手段是标明页码,按顺序排列
,
3. 索引的最终目的是供人查阅
联系到我们实际生活,就是无人不知的新华字典的拼音索引:
最终目的:帮助我们快速定位到一个字的在字典中的具体位置!
MySQL中索引
和字典的索引差不多,帮助我们快速定位记录所在位置,但低层的实现和存储结构不一样。
通常说的MySQL索引就是B-Tree索引,因为它是用B-Tree这种数据结构来存储数据的。
那么到底什么是B-Tree呢?
备注:读B树,而不是B减树,国内早期翻译引起的误会。但是有B+Tree读B加树。
我们来看看它一颗二叉树如何进化成B-Tree。
二叉树:根没有父节点,最多有两个子节点;叶子节点没有子节点;其他节点最多有一个父节点,两个子节点。
二叉查找树:左子树的key值都小于根的key值,右子树的key值都大于根的key值。造成的结果就是存放的数据是有序的,通过中序遍历(左根右)出来就是从小到大的一组数据。
为什么用查找树:它是特殊的一种二叉树。根据它得存储特性,用二分查找法查找数据比线性查找要快很多。
二叉平衡树(AVL树):左右子树的高度差不能超过1。超过1就旋转,直到平衡。如何旋转一时半会说不清,暂时抛开不管。总之最终得维持树高度的平衡。
为什么要旋转:因为二叉树有N种,和key值先后顺序有关。比如下面的两棵树都是二叉查找树,但是右边是最极端的情况,变成了线性结构,但它也满足二叉查找树的定义,但和左边的树比起来查找效率是很低的:
B-树:为了快速理解,《MySQL技术内幕》给出了最简单的解释:首先它是一种平衡二叉树,所有的记录都是按大小顺序存放在同一层的叶子节点上,各个叶子节点用指针彼此相连(B+树)。最终结果如下图:
B-Tree索引,就是B-Tree在数据库中的实现。(实际上是B+Tree)。
创建索引
根据创建时机:
1、建表时创建
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
2、修改表结构时
ALTER mytable ADD INDEX [indexName] ON (username(length))
3、单独创建索引
CREATE INDEX indexName ON mytable(username(length));
备注:MySQL中key和index的区别?
联合索引
创建联合索引:
alter table j_position add index idx_county_town_village(county_name,town_name,village_name);
联合索引是什么?
本质上就是上面说的B-Tree索引。只不过它得key值是(“凤阳县”,”小溪河镇”,”小岗村”)。
这些查找情况会使用索引:
A、查找”凤”开头的县
B、查找凤阳县并”小”字开头的村,是会使用索引的
但是,以下情况不会使用索引:
A、查找”阳”结尾的县
B、查找”小溪河镇”的镇
原因——最左前缀匹配。
- 从零开始了解MySQL索引
- (2)Mysql ---- 索引ABC 《MYSQL 5.5从零开始学》笔记
- mysql索引需要了解的几个注意
- mysql索引需要了解的几个注意
- mysql索引需要了解的几个注意
- 深入了解MySQL的索引(一)
- mysql索引需要了解的几个注意
- mysql索引需要了解的几个注意
- mysql索引需要了解的几个注意
- mysql索引需要了解的几个注意
- mysql索引需要了解的几个注意
- mysql索引需要了解的几个注意
- mysql索引需要了解的几个注意
- 【从零开始学习MySql数据库】(5)约束视图与索引
- 从零开始了解JavaScript
- mysql索引必须了解的几个重要问题
- mysql索引必须了解的几个重要问题
- mysql索引必须了解的几个重要问题
- Java学习笔记(七)--权限修饰符 内部类
- SDN 交换机及南向接口技术(一)
- java开发环境选择
- Div内嵌iframe及自适应实现
- KMP模板
- 从零开始了解MySQL索引
- Unity之JSon
- Ubuntu环境配置
- 基础知识—条件判断语句-switch语句
- WAV文件分析
- Mac DBeaver Client home is not specified for connection解决办法
- 华为和魅族手机不输出Log打印
- 量化python网站整理
- camera驱动概述