一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM
聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM经常遇到有人向我咨询这个问题,其实呢,网上帖子很多,也说的都对,但是呢,看客可不一定是真的理解了。所以今天在这里用最简短的语言让你明白这些区别。
看这种图表就一切都明白了:
存储引擎 | 索引类型 | 主键叶子节点 | 非主键叶子节点 |
MyISAM | 非聚簇 | 数据地址 | 数据地址 |
InnoDB | 聚簇 | 全部数据 | 主键值 |
key重复 | 不能 | 能 |
问题:InnoDB和MyISAM选那个?
MySQL5.6以后选InnoDB。
看看官方文档是最权威的:https://dev.mysql.com/doc/refman/5.7/en/innodb-benefits.html
===========上面已经把这个高频问题说完了,下面是为了满足好学者所做的扩展=============
名词解释
Clustered Index:聚集索引,又称聚簇索引。
Nonclustered indexes:非聚集索引,又称非聚簇索引。
Secondary Key:二级索引,因为聚集索引只能有一个,所有同一个表其他字段只能是二级索引也就是非聚集索引。
看看经典著作《高性能MySQL(第3版)》关于聚簇索引的说明:
再看看关于隐式创建聚簇索引的说明:
关于二级索引:
MyISAM的数据分布:
InnDB最关键的就是聚集索引叶子节点存所有的数据项,二级索引存的是主键值,而不是行指针,而MyISAM存的是行指针:
下面是 InnoDB和MyISAM的索引数据存储分布,如图所示MyISAM是索引叶子节点有指针指向,而 InnoDB则直接存数据没用指针:
下面这个帖子也是写的极好的 ,作者很会画图,整体还是没用超越《高性能MySQL(第3版)》,如果上面的还看不懂可以看看此贴--《MySQL索引背后的数据结构及算法原理》。
MyISAM索引实现
MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图:
InnoDB索引实现
虽然InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。
第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。
第二个与MyISAM索引的不同是InnoDB的辅助索引data域存储相应记录主键的值而不是地址:
相关文章:

awstats CGI模式下动态生成页面缓慢的改进
本文可以看做是 多server多站点情况下awstats日志分析 这篇文章的下篇,在使用过程中发现awstats在cgi模式下动态生成分析报告慢的问题 (尤其是有些站点每天两个多G的日志,查看起来简直是在考验人的耐性),本文分享一种改…

计算机水平flash试题,计算机flash考试试题
《Flash动画设计》课程考核方案一、考试班级及科目216班 《Flash动画设计》二、考试时间1、考核时间:90分钟2、考试地点:学校计算机3机房3、考核时期:十七、十八周内各课任教师自主选定三、考核形式上机独立完成所有操作。在规定时间内按考核…

CDH大数据集群安全风险汇总
一,风险分为内部和外部 首先内部: CDH大数据集群部署过程中会自动创建以服务命名的用户,如图所示 用户名(login_name):口令位置(passwd):用户标识号(UID):用户组标识号(GID):注释性描述(users)&…
有界阻塞队列ArrayBlockingQueue和无界阻塞队列LinkedBlockingQueue
ArrayBlockingQueue和LinkedBlockingQueue最大的区别是一个是有界无界,各有优劣。 先看实例代码: main函数起2个线程模拟生成消费者 import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.…

zabbix监控windows 服务器各项性能
Zabbix agent 在windows上安装部署1、 下载与解压地址: http://www.zabbix.com/downloads/2.4.0/zabbix_agents_2.4.0.win.zip解压zabbix_agents_2.4.0.win.zipconf目录存放是agent配置文件 bin文件存放windows下32位和64位安装程序2、 配置与安装2.1 配置zabbix agent相关配…

计算机设备板块超跌,半导体全线拉升,沪指强势突破3600点,午后A股会再次冲高回落吗...
周四开盘沪指开于3585点,和周三收盘价低开了8个点。上午开盘后沪指呈现低开高走的趋势,10点以后沪指持续拉升上涨不但顺利地突破了3600点而且还创了反弹新高。除了沪指以外深市三大股指也是全线翻红,上午A股的三大股指再次全线拉升并且均创了…

docker之基础
一、Docker简介 容器:运行在同一类用户空间上的程序打包在一起,相当于一个集装箱 Docker:码头装运工;把集装箱搬运到该有的位置。 Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC&…
Java一个线程能否结束另一个永不停止的线程
在Java中停止一个线程有三种办法 : 1.正常结束执行; 2.发生异常; 3.被其他线程stop(Java官方不建议) 参考:https://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html 为什么Thread.stop弃用…

pxe cobbler ipmi bmc
http://blog.csdn.net/xuensong520/article/details/8922926 http://blog.csdn.net/xuensong520/article/details/8915945 http://www.wenzizone.cn/?p408 #执行外部脚本(后置脚本)vi /var/www/cobbler/ks_mirror/config/autoip.sh #创建脚本,自动设置Linux系统静…

广东电大计算机绘图试题,电大计算机绘图期末复习试题及答案参考小抄.doc
电大计算机绘图期末复习试题及答案参考小抄一、填空题(每小题1.5分,共30分)1.CAD的常用图形输入设备有???鼠标??、数字化仪、图形输入板、光笔、??键盘 等。2.CAD的软件可分为系统软件、支撑软件和???应用软件??? 软件三个层次。…

django07 字符串替换
1. 模板语言(字符串替换) 1. 母版和继承 1. 什么时候用母版? html页面有重复的代码,把它们提取出来放到一个单独的html文件。 (比如:导航条和左侧菜单) 2. 子页面如何使用母版? {% e…

【云和恩墨】一次 truncate 核心表衍生的安全管理思考
第一章 一次 truncate 核心表衍生的安全管理思考 云和恩墨 | 2016-05-06 17:56 本文编辑整理来自上周四晚云和恩墨大讲堂 黄嵩 关于数据安全问题的分享。安全问题涉及到信息系统的方方面面,尤其是其核心资产——数据的安全。无论是数据访问控制的裸露࿰…
合理估算线程池线程数量
参考《Java并发编程实战》 线程数量计算公式 公式:Nthread Ncpu * Ucpu * (1 W/C),各字段含义: Nthreads:线程数量 Ncpu:CPU的数量,Runtime.getRuntime().availableProcessors()…

通过regedt查看计算机密码,win10系统通过注册表设置定时更换密码提醒的处理步骤...
有关win10系统通过注册表设置定时更换密码提醒的操作方法想必大家有所耳闻。但是能够对win10系统通过注册表设置定时更换密码提醒进行实际操作的人却不多。其实解决win10系统通过注册表设置定时更换密码提醒的问题也不是难事,小编这里提示两点: 1、首先在…

苏宁零售云 App 稳定保障实践
1. 背景 苏宁零售云目标T4-T6级市场的业务,定位更靠谱的智慧零售解决方案和零售服务集成商,实战式跨界赋能。苏宁易购TO C的经验丰富,相关的方案很完善,但是零售云TO B相关业务启动后,业务增长迅速,App相关…

小酌重构系列[8]——提取接口
前言 世间唯一“不变”的是“变化”本身,这句话同样适用于软件设计和开发。在软件系统中,模块(类、方法)应该依赖于抽象,而不应该依赖于实现。 当需求发生“变化”时,如果模块(类、方法…
多线程并发编程需要注意虚假唤醒Spurious wakeup
虚假唤醒 Spurious wakeup 如果等待线程在没有通知被调用的情况下唤醒,则称为Spurious wakeup。 解决方案就是: 使用while条件判断,更好的方案是避免使用wait这种低级的API,而是使用高级的并发工具。 因为这些高级的并发工具都是经过无数…

高中计算机个人总结怎么写,毕业生自我总结范文
毕业生自我总结范文1时光飞逝,三年忙碌而充实的大学生活在一片有序的繁忙中将要过去了,回首过去三年,内心感慨万千。我是20xx年春参加电大机械班的学习,回顾这三年的电大学习之路,饱含了汗水和收获。总结是一面镜子&am…

python - 字符串的格式化输出
# -*- coding:utf-8 -*-project: jiaxyauthor: Jimmyfile: study_2_str.pyide: PyCharm Community Editiontime: 2018-11-01 15:12blog: https://www.cnblogs.com/gotesting/# 字符串s #空字符串# 1:字符串拼接# 1.1:字符串与字符串的拼接用 连接s_1 hellos_2 worlds_3 5…
一个冷僻的知识点try直接返回finally里的设置null其实无效
先看引用类型的代码: import java.util.HashMap; import java.util.Map;public class trycatchefinally {public static void main(String[] args) {System.out.println(getMap().get("KEY"));}public static Map<String, String> getMap() {Map&l…

身份证工具类
2019独角兽企业重金招聘Python工程师标准>>> 身份证工具类 package com.pqs.common.tools;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util…

目前常用的服务器端网络操作系统有,目前常用的服务器端网络操作系统是()。...
在一台IP地址为192.168.1.1的Windows Server 2008 R2计算机上安装活动目录,建立一个森林根域test.com,保留默认的域功能级别,同时使该计算机成为域test.com的首台域控制器并承担着DNS服务器和全局编录服务器的角色。 操作步骤ÿ…

如何处理用代码创建SD Sales order时遇到的错误消息KI 180
2019独角兽企业重金招聘Python工程师标准>>> 错误消息KI 180:You must enter a company code for transaction Create sales document 代码: REPORT zcreate_so.DATA: ls_header TYPE bapisdhd1,ls_headerx TYPE bapisdhd1x,lt_bapiret2 LIKE bapiret2 OCCURS …
Flink 基本原理与生产实践分享【入门必读,概念清晰】
Flink 基本原理与生产实践分享【入门必读,概念清晰】 https://zh.wikipedia.org/zh-hans/Apache_Flink Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流…

数据库模型设计——主键的设计
在数据库设计时,主要就是对实体和关系的设计,实体表现出来就是表,关系表现出来就是外键。而对于一个表,由两部分组成:主键和属性。主键的简单定义就是表中为每一行数据的唯一标识。其实更准确的说法,每一行…

jsp ajax动态添加数据,jquery Ajax实现Select动态添加数据
jquery Ajax实现Select动态添加数据,具体内容如下1.背景最近在工作中,遇到了一个关于select的问题。一般情况下,select下拉框中的数据都是固定的或者直接在jsp中读取列表值显示。但是,这次要实现select与别的选项框联动࿰…

Spring Boot(十一)Redis集成从Docker安装到分布式Session共享
2019独角兽企业重金招聘Python工程师标准>>> 一、简介 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,Redis也是技术领域使用最为广泛的存储中间件,它是「…
Java线上问题排障:Linux内核bug引发JVM死锁导致线程假死
Java本质上还是离不开操作系统,一来Java源码是用C/C实现的,二来java进程还是需要依附于操作系统和硬件资源,有时候一些问题是操作系统级别导致的,下面的整个事件是源自一则真实的线上案例。 过程: JVM死锁导致线程不可…

从AdventureWorks学习数据库建模——保留历史数据
在业务需求中,经常需要我们在系统中能够记录历史信息,能够查看到历史变动情况,这时我们可以通过增加开始结束时间字段来记录数据的历史版本。对数据的历史记录主要分为:关系、属性历史,实体历史和变更历史。 关系、属性…

因特网的域名服务器系统的好处,dns域名服务器的作用是什么
大家好,我是智能客服时间君,上述问题将由我为大家进行解答。dns是域名系统 (Domain Name System) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。DNS 命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机…