B树

基于不同的查找算法分类介绍

B*Tree

B-tree

B+Tree 在范围查询方面提供了更好的性能(> < >= <= like)

索引简介

索引作用
提供了类似于书中目录的作用,目的是为了优化查询 索引的种类(算法)
B树索引
Hash索引
R树
Full text
GIS

索引分类

辅助索引(S)

辅助索引细分

1.普通的单列辅助索引

2.联合索引
多个列作为索引条件,生成索引树,理论上设计的好的,可以减少大量的回表查询 3.唯一索引
索引列的值都是唯一的

辅助索引(S)怎么构建B树结构

(1)索引是基于表中列(索引键)的值生成的B树结构
(2)首先提取此列所有的值,进行自动排序
(3)将排好序的值,均匀的分布到索引树的叶子节点中(16K)
(4)然后生成此索引键值所对应得后端数据页的指针
(5)生成枝节点和根节点,根据数据量级和索引键长度,生成合适的索引树高度
id name age gender
select * from t1 where id=10;
问题: 基于索引键做where查询,对于id列是顺序IO,但是对于其他列的查询,可能是随机IO

聚集索引(C)

前提

(1)表中设置了主键,主键列就会自动被作为聚集索引
(2)如果没有主键,会选择唯一键作为聚集索引
(3)聚集索引必须在建表时才有意义,一般是表的无关列(ID)

聚集索引(c)怎么构建B树结构

(1) 在建表时,设置了主键列(ID)
(2) 在将来录入数据时,就会按照ID列的顺序存储到磁盘上.(我们又称之为聚集索引组织表)
(3) 将排好序的整行数据,生成叶子节点.可以理解为,磁盘的数据页就是叶子节点

聚集索引和辅助索引构成区别

聚集索引只能有一个,非空唯一,一般是主键
辅助索引,可以有多个,是配合聚集索引使用的
聚集索引叶子节点,就是磁盘的数据行存储的数据页
MySQL是根据聚集索引,组织存储数据,数据存储时就是按照聚集索引的顺序进行存储数据
辅助索引,只会提取索引键值,进行自动排序生成B树结构

索引树的高度受什么影响

1. 数据量级, 解决方法:分表,分库,分布式
2. 索引列值过长, 解决方法:前缀索引
3. 数据类型:
变长长度字符串,使用了char,解决方案:变长字符串使用varchar
enum类型的使用enum ('山东','河北','黑龙江','吉林','辽宁','陕西'......)

索引的基本管理

索引建立前

mysql> desc city;
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| CountryCode | char(3) | NO | | | |
| District | char(20) | NO | | | |
| Population | int(11) | NO | | 0 | |
+-------------+----------+------+-----+---------+----------------+
5 rows in set (0.00 sec) Field :列名字 key :有没有索引,索引类型
PRI :主键索引
UNI :唯一索引
MUL :辅助索引(单列,联和,前缀)

单列普通辅助索引

建表后创建:
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL]  INDEX | KEY  [索引名] (字段名1 [(长度)] [ASC | DESC]) [USING 索引方法]; 或
CREATE  [UNIQUE | FULLTEXT | SPATIAL]  INDEX  索引名 ON  表名(字段名) [USING 索引方法]; 1 创建索引
mysql> alter table city add index idx_name(name); # 方法1
mysql> create index idx_name1 on city(name); # 方法2
mysql> show index from city;
注意:以上操作不代表生产操作,不建议在一个列上建多个索引。同一个表中,索引名不能同名 2 删除索引:
mysql> alter table city drop index idx_name;

覆盖索引(联合索引)

mysql> alter table city add index idx_co_po(countrycode,population);

前缀索引

mysql> alter table city add index idx_di(district(5));
注意:数字列不能用作前缀索引

唯一索引

mysql> alter table city add unique index idx_uni1(name);
ERROR 1062 (23000): Duplicate entry 'San Jose' for key 'idx_uni1' 统计city表中,以省的名字为分组,统计组的个数
mysql> select district,count(id) from city group by district; 需求: 找到world下,city表中 name列有重复值的行,最后删掉重复的行
mysql> select name,count(id) as cid from city group by name having cid>1 order by cid desc;
mysql> select * from city where name='suzhou';

MySQL-08-索引简介的更多相关文章

  1. MySQL数据库索引简介

    一.索引的含义和特点     索引是一个单独的.存储在磁盘上的数据库结构,他们包含着对数据表里所有记录的引用指针.使用索引用于快速找出某个或多个列中有一特点值的行,所用MySQL列类型都可以被索引,对 ...

  2. mysql之索引简介

    索引分类 mysql在存储数据时,是按着主键的顺序存储的.主键索引是物理索引,其他索引都是逻辑索引. 普通索引 普通索引是最基本的索引,没有任何限制的索引,普通索引列的数据可以重复.其唯一的任务就是加 ...

  3. MySQL隐形索引简介

    不可见索引允许您将索引标记为查询优化器不可用.MySQL维护不可见索引,并在与索引关联的列中的数据发生更改时使其保持最新. 默认情况下,索引是可见的.要使它们不可见,您必须在创建时或使用ALTER T ...

  4. 【Mysql】索引简介

    本文口味:番茄炒蛋,预计阅读:10分钟. 博客又停更了两个月,在这期间,对人生和世界多了许多思考.在人生的不同阶段,会对生活和世界有着不一样的认知,而认知的改变也会直接反应在行为模式之中. 对于生活的 ...

  5. 【mysql】- 索引简介篇

    简介 我们都知道mysql使用存储引擎的是InnoDB,InnoDB使用的索引的对应的数据结构是B+树 结构图: 如上图所示,我们实际用户记录是存放在B+树的最底层的节点上,这些节点也被称为叶子节点或 ...

  6. MySQL中的索引简介

    MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 一. 索引的优点 为什么要创建索引?这是因为,创建索引可以大大提高系统的查询性能. 第一.通过创建唯一性索引,可以保 ...

  7. 第 3 章 MySQL 存储引擎简介

    第 3 章 MySQL 存储引擎简介 前言 3.1 MySQL 存储引擎概述 MyISAM 存储引擎是 MySQL 默认的存储引擎,也是目前 MySQL 使用最为广泛的存储引擎之一.他的前身就是我们在 ...

  8. MySQL(3)-索引

    一.索引类型 在MySQL中,存储引擎使用索引,首先在索引中找到对应值,然后根据匹配的索引记录中找到对应的行. 无论是多么复杂的ORM工具,在精妙和复杂的索引面前都是"浮云".这里 ...

  9. 为什么MySQL数据库索引选择使用B+树?

    在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使 ...

  10. MySQL慢日志简介及Anemometer工具介绍

    作者:王航威 - fordba.com 来源:http://fordba.com/box-anemometer-visual-mysql-slow.html,叶师傅对原文内容略有调整 备注:王航威是知 ...

随机推荐

  1. 【知识点】inline函数、回调函数、普通函数

    目录 一.inline内联函数 1.1 使用 1.2 编译器对 inline 函数处理步骤 1.3 优缺点 1.3.1 优点 1.3.2 慎用内联 1.3.3 不宜使用内联 1.4 虚函数(virtu ...

  2. docker起不来报错:Failed to start Docker Application Container Engine.

    报错信息如下: [root@localhost localdisk]# systemctl restart docker Job for docker.service failed because t ...

  3. Java核心基础第4篇-Java数组的常规操作

    Java数组 一.数组简介 数组是多个相同类型数据的组合,实现对这些数据的统一管理 数组属引用类型,数组型数据是对象(Object) 数组中的元素可以是任何数据类型,包括基本类型和引用类型 数组类型是 ...

  4. 基于Mininet的网络拓扑搭建代码

    1 import logging 2 import os 3 import time 4 import thread 5 import multiprocessing 6 7 from mininet ...

  5. C语言:位运算符总结

    位运算符:1.指对操作数以二进制位( bit)为单位进行的数据处理2.每一个二进制位只存放0或13. 取反:~  按位反 ~ 0变1 1变0 ~1=0 ~0=14.异或: ^ 相同为0,不相同为1 1 ...

  6. C语言:体现\r的结果

    #include <stdio.h> #include <windows.h> //体现\r的结果 //转义字符\r,回车,将光标移动到当前行最开始 main() { char ...

  7. mysql 按照年统计数据并存到新表中

    参考:https://blog.csdn.net/u013201439/article/details/78116575 CREATE TABLE count_year SELECT YEAR(req ...

  8. 前端js重组树形结构数据方法封装

    不知道大家平时工作中,有没有遇到这样一种情况:后端接口返回的数据,全都是一维的数组,都是平铺直叙式的数据,业务需求却要你实现树形结构的功能.那么,针对这种情况该怎么办呢?是跟后台好好沟通一下呢,还是沟 ...

  9. 《手把手教你》系列技巧篇(九)-java+ selenium自动化测试-元素定位大法之By name(详细教程)

    1.简介 上一篇宏哥已经介绍了通过id来定位元素,今天继续介绍其他剩下的七种定位方法中的通过name来定位元素.本文来介绍Webdriver中元素定位方法之By name,顾名思义,就是我们想要定位的 ...

  10. height设置100%不起作用

    详细讲解了原因:http://www.webhek.com/post/css-100-percent-height.html