MYsql源码及其剖析
索引基本介绍
索引类型
存储结构: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数据
叶子节点用指针连接,提高区间的访问性能
- List item
MYsql源码及其剖析相关推荐
- mysql源码剖析–LEX结构分析
mysql源码剖析–LEX结构分析 引言 1 select语法树 1.1 核心数据结构 1.2 语法树结构 2 from子句 2.1 解析原理 2.2 语法树结构 3 where语句 引言 mysql ...
- mysql源码剖析–通信协议分析
mysql源码剖析–通信协议分析 引言 1 交互过程 1.1 认证阶段 1.2 服务阶段 1.3 退出阶段 2 协议简介 2.1 server->client握手协议 2.2 client-&g ...
- libevent源码深度剖析
原文地址:http://blog.csdn.net/sparkliang/article/details/4957667 libevent源码深度剖析一 --序幕 张亮 1 前言 Libevent是一 ...
- libevent源码深度剖析十一
libevent源码深度剖析十一 --时间管理 张亮 为了支持定时器,Libevent必须和系统时间打交道,这一部分的内容也比较简单,主要涉及到时间的加减辅助函数.时间缓存.时间校正和定时器堆的时间值 ...
- 读 MySQL 源码再看 INSERT 加锁流程
欢迎关注方志朋的博客,回复"666"获面试宝典 在之前的博客中,我写了一系列的文章,比较系统的学习了 MySQL 的事务.隔离级别.加锁流程以及死锁,我自认为对常见 SQL 语句的 ...
- MySQL 源码 需要 什么基础_MySQL 基础之 源码 部署
源码部署 1. 需要先卸载一些软件 centos7 中需要先卸载 mariadb-libs 软件包 # rpm -e --nodeps mariadb-libs 2. 安装依赖包 yum -y ins ...
- 怒肝两个月MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!
写在前面 最近,在开发一个分库分表中间件,由于功能需求,需要分析MySQL协议,发现网上对于MySQL协议分析的文章大部分都过时了,原因是分析的MySQL版本太低了.怎么办呢?于是乎,我便硬着头皮开始 ...
- gcc编译器和mysql源码哪个难_源码编译mysql 5.5
http://blog.csdn.net/aidenliu/article/details/6586610 源码编译mysql 5.5+ 安装过程全记录 分类: Mysql 2011-07-05 21 ...
- (二)企业部分之lnmp环境的搭建:mysql源码安装
Web服务器架构 Web服务器架构一般主要由系统环境.Web服务器.数据库和语言组成. 可以有以下组成方式: 系统:linux unix windox mac freebsd aix Web服务器:a ...
- mysql windows编译_Windows平台下编译Mysql源码 | 学步园
最近由于项目的关系,需要使用到Mysql数据库,而我的工作任务与数据库有很大的关系,所以,决定好好学学Mysql,同时,也把Mysql的源码下载了,希望能有利于对它的学习.这里记录一下windows平 ...
最新文章
- Linux_学习_01_常用命令大全
- Spring Cloud(三):Eureka控制台参数说明
- Angular 7 版本
- 华为手机怎么调出云相册_华为云手机引关注!将替代传统手机?华为回应来了...
- php中array怎么用,php array函数怎么用
- 皇家特使2 全三星攻略
- iphone短信尚未送达_第五期:从苹果 乔布斯 iPhone 说到张小龙 微信 理财通
- Jenkins(Pipeline)
- RTS与CTS的含义
- 理想汽车,重新定义“召回”
- 后PC时代的桌面虚拟化解决方案——VMware View 5
- python爬取qq好友网络状态_Python爬虫实战----爬取QQ空间好友说说并生成词云(超详细)...
- mac地址厂商查询_3.15干货你的手机mac地址泄漏了吗
- 小程序界面设计难?有了这个高颜值UI,我带你一步步解决所有难题
- 保存html为pdf,将网页保存为PDF的几种方法
- PHP实现地址自动识别的功能实例
- Ubuntu系统下MRIcroN、FSL6.0.5、Freesurfer7.1.1、ANTs、MRtrix3、AFNI的安装详解——核磁共振数据处理必备
- 【二级等保】二级等保安全物理环境要求有哪些?
- 基于CNN算法自定义模型的动物识别项目1
- pip 常用命令及控制台怎么查看python 及pip 和已安装包版本号
热门文章
- IDEA常用快捷键整理大全(非常详细)持续更新中...
- 使用 Socket 通信实现 FTP 客户端程序
- 计算机度分秒在线,角度分秒换算(度分秒换算器在线)
- linux装流量宝,流量宝下载_流量宝官方APP手机最新版本下载安装 - 风云下载
- ug470_7Series_Config 中文文档 | Xilinx
- AxureRP初体验
- 【流体力学】加和不加湍流模型在NS方程上的体现
- 无线摄像头服务器关闭,监控摄像头服务器停止
- Boot Camp 驱动
- Arm mini China新公司传预定四月分割Arm中国业务