索引基本介绍

索引类型

存储结构:B Tree索引、Hash索引、FULLTEXT全文索引、R Tree索引

应用层次:普通索引、唯一索引、主键索引、复合索引

索引键值类型:主键索引、辅助索引(二级索引)

数据存储和索引键值逻辑关系:聚集索引(聚簇索引)、非聚集索引(非聚簇索引)

普通索引

CREATE INDEX <索引的名字> ON tablename (字段名);ALTER TABLE tablename ADD INDEX [索引的名字] (字段名);CREATE TABLE tablename ( [...], INDEX [索引的名字] (字段名) );

唯一索引

1.索引字段的值必须唯一,但允许有空值

2.在创建或修改表时追加唯一 约束,就会自动创建对应的唯一索引。

与普通索引相比 增加UNIQUE =》UNIQUE INDEXCREATE UNIQUE INDEX <索引的名字> ON tablename (字段名);
ALTER TABLE tablename ADD UNIQUE INDEX [索引的名字] (字段名);
CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (字段名) ;

主键索引

它是一种特殊的唯一索引,不允许有空值。也会自动创建

CREATE TABLE tablename ( [...], PRIMARY KEY (字段名) );
ALTER TABLE tablename ADD PRIMARY KEY (字段名)

复合索引

复合索引可以代替多个单一索引,相比多个单一索引复合 索引所需的开销更小。

重要原则就是能用窄索引不用宽索引。更有效

CREATE INDEX <索引的名字> ON tablename (字段名1,字段名2...);
ALTER TABLE tablename ADD INDEX [索引的名字] (字段名1,字段名2...);
CREATE TABLE tablename ( [...], INDEX [索引的名字] (字段名1,字段名2...) );

何时使用复合索引,要根据where条件建索引,注意不要过多使用索引,过多使用会对更新操作效率有很大影响。

如果表已经建立了(col1,col2),就没有必要再单独建立(col1);

如果现在有(col1)索引,如果查 询需要col1和col2条件,可以建立(col1,col2)复合索引,对于查询有一定提高。

全文索引

​ 待补充 2021年11月30日

索引原理

索引是物理数据页存储,在数据文件中(InnoDB,ibd文件),利用数据页(page)存储。

索引可以加快检索速度,但是同时也会降低增删改操作速度,索引维护需要代价。

二分

hash

B tree

b数的阶是由我们自己考虑决定的,m=5时

  • 每个节点最多只有m个子节点。
  • 每个非叶子节点(除了根)具有至少⌈ m/2⌉子节点。
  • 如果根不是叶节点,则根至少有两个子节点。
  • 具有k个子节点的非叶节点包含k -1个键。
  • 所有叶子都出现在同一水平,没有任何信息(高度一致)。

B+ tree

非叶子节点不存储data数据,只存储索引值。这样便于存储更多的索引值

叶子节点包含了所有的索引值和data数据

叶子节点用指针连接,提高区间的访问性能

  1. List item

MYsql源码及其剖析相关推荐

  1. mysql源码剖析–LEX结构分析

    mysql源码剖析–LEX结构分析 引言 1 select语法树 1.1 核心数据结构 1.2 语法树结构 2 from子句 2.1 解析原理 2.2 语法树结构 3 where语句 引言 mysql ...

  2. mysql源码剖析–通信协议分析

    mysql源码剖析–通信协议分析 引言 1 交互过程 1.1 认证阶段 1.2 服务阶段 1.3 退出阶段 2 协议简介 2.1 server->client握手协议 2.2 client-&g ...

  3. libevent源码深度剖析

    原文地址:http://blog.csdn.net/sparkliang/article/details/4957667 libevent源码深度剖析一 --序幕 张亮 1 前言 Libevent是一 ...

  4. libevent源码深度剖析十一

    libevent源码深度剖析十一 --时间管理 张亮 为了支持定时器,Libevent必须和系统时间打交道,这一部分的内容也比较简单,主要涉及到时间的加减辅助函数.时间缓存.时间校正和定时器堆的时间值 ...

  5. 读 MySQL 源码再看 INSERT 加锁流程

    欢迎关注方志朋的博客,回复"666"获面试宝典 在之前的博客中,我写了一系列的文章,比较系统的学习了 MySQL 的事务.隔离级别.加锁流程以及死锁,我自认为对常见 SQL 语句的 ...

  6. MySQL 源码 需要 什么基础_MySQL 基础之 源码 部署

    源码部署 1. 需要先卸载一些软件 centos7 中需要先卸载 mariadb-libs 软件包 # rpm -e --nodeps mariadb-libs 2. 安装依赖包 yum -y ins ...

  7. 怒肝两个月MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!

    写在前面 最近,在开发一个分库分表中间件,由于功能需求,需要分析MySQL协议,发现网上对于MySQL协议分析的文章大部分都过时了,原因是分析的MySQL版本太低了.怎么办呢?于是乎,我便硬着头皮开始 ...

  8. gcc编译器和mysql源码哪个难_源码编译mysql 5.5

    http://blog.csdn.net/aidenliu/article/details/6586610 源码编译mysql 5.5+ 安装过程全记录 分类: Mysql 2011-07-05 21 ...

  9. (二)企业部分之lnmp环境的搭建:mysql源码安装

    Web服务器架构 Web服务器架构一般主要由系统环境.Web服务器.数据库和语言组成. 可以有以下组成方式: 系统:linux unix windox mac freebsd aix Web服务器:a ...

  10. mysql windows编译_Windows平台下编译Mysql源码 | 学步园

    最近由于项目的关系,需要使用到Mysql数据库,而我的工作任务与数据库有很大的关系,所以,决定好好学学Mysql,同时,也把Mysql的源码下载了,希望能有利于对它的学习.这里记录一下windows平 ...

最新文章

  1. Linux_学习_01_常用命令大全
  2. Spring Cloud(三):Eureka控制台参数说明
  3. Angular 7 版本
  4. 华为手机怎么调出云相册_华为云手机引关注!将替代传统手机?华为回应来了...
  5. php中array怎么用,php array函数怎么用
  6. 皇家特使2 全三星攻略
  7. iphone短信尚未送达_第五期:从苹果 乔布斯 iPhone 说到张小龙 微信 理财通
  8. Jenkins(Pipeline)
  9. RTS与CTS的含义
  10. 理想汽车,重新定义“召回”
  11. 后PC时代的桌面虚拟化解决方案——VMware View 5
  12. python爬取qq好友网络状态_Python爬虫实战----爬取QQ空间好友说说并生成词云(超详细)...
  13. mac地址厂商查询_3.15干货你的手机mac地址泄漏了吗
  14. 小程序界面设计难?有了这个高颜值UI,我带你一步步解决所有难题
  15. 保存html为pdf,将网页保存为PDF的几种方法
  16. PHP实现地址自动识别的功能实例
  17. Ubuntu系统下MRIcroN、FSL6.0.5、Freesurfer7.1.1、ANTs、MRtrix3、AFNI的安装详解——核磁共振数据处理必备
  18. 【二级等保】二级等保安全物理环境要求有哪些?
  19. 基于CNN算法自定义模型的动物识别项目1
  20. pip 常用命令及控制台怎么查看python 及pip 和已安装包版本号

热门文章

  1. IDEA常用快捷键整理大全(非常详细)持续更新中...
  2. 使用 Socket 通信实现 FTP 客户端程序
  3. 计算机度分秒在线,角度分秒换算(度分秒换算器在线)
  4. linux装流量宝,流量宝下载_流量宝官方APP手机最新版本下载安装 - 风云下载
  5. ug470_7Series_Config 中文文档 | Xilinx
  6. AxureRP初体验
  7. 【流体力学】加和不加湍流模型在NS方程上的体现
  8. 无线摄像头服务器关闭,监控摄像头服务器停止
  9. Boot Camp 驱动
  10. Arm mini China新公司传预定四月分割Arm中国业务