MySQL 聚簇索引和聚簇索引(二级索引)

聚簇索引和二级索引 数据查询效率高,因为聚簇索引构建的B+tree的叶子节点存放完整的行数据,所以通过聚簇索引查询比二级索引查询速度快。通过主键id查询时候,因为叶子节点已经存储了完整的每一行的数据,查询的效率非常高。对于上一个sql的执行计划,执行计划中的字段基本和上一个sql一致,只有。因为有创建了id为主键索引,所以 t_user_cate表的聚簇索引在。,所以还需要通过查询到的值查询聚簇索引,是会损耗一点性能的。查询,user_id=1123,查询到叶子节点,存储的是。第二步:通过上一步查询到的id=1,再来查询。 阅读详情

MySQL 聚簇索引和聚簇索引(二级索引)

      mysql的聚簇索引是指innodb引擎的特性,mysiam并没有,如果需要该索引,只要将索引指定为主键(primary key)就可以了。比如:

[sql]   view plain  copy
  1. create table system_user  
  2. (  
  3.   user_Name char(15) not null check(user_Name !=''),  
  4.   user_Password char(15) not null,  
  5.   user_emial varchar(20) not null unique,  
  6.   primary key(user_Name)            
  7.     
  8. )engine=innodb default charset=utf8 auto_increment=1;  

      其中的 primary key(user_Name) 这个就是聚簇索引索引了;

聚簇索引的叶节点就是数据节点,而非聚簇索引的叶节点仍然是索引节点,并保留一个链接指向对应数据块。

      聚簇索引主键的插入速度要比非聚簇索引主键的插入速度慢很多。相比之下,聚簇索引适合排序,非聚簇索引(也叫二级索引)不适合用在排序的场合。
      因为聚簇索引本身已经是按照物理顺序放置的,排序很快。非聚簇索引则没有按序存放,需要额外消耗资源来排序。
      当你需要取出一定范围内的数据时,用聚簇索引也比用非聚簇索引好。
      另外,二级索引需要两次索引查找,而不是一次才能取到数据,因为存储引擎第一次需要通过二级索引找到索引的叶子节点,从而找到数据的主键,然后在聚簇索引中用主键再次查找索引,再找到数据。


innodb索引分类:
聚簇索引(clustered index)
    1)  有主键时,根据主键创建聚簇索引
    2)  没有主键时,会用一个唯一且不为空的索引列做为主键,成为此表的聚簇索引
    3) 如果以上两个都不满足那innodb自己创建一个虚拟的聚集索引
辅助索引(secondary index)
   非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引


myisam索引:

     因为myisam的索引和数据是分开存储存储的,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因  

innodb索引:

     innodb的数据和索引放在一起,当找到索引也就找到了数据

自适应哈希索引:

     innodb会监控表上的索引使用情况,如果观察到建立哈希索引可以带来速度的提升,那就建立哈希索引,自 适应哈希索引通过缓冲池的B+树构造而来,因此建立的速度很快,不需要将整个表都建哈希索引,InnoDB 存储引擎会自动根据访问的频率和模式来为某些页建立哈希索引。自适应哈希索引不需要存储磁盘的,当停库内容会丢失,数据库起来会自己创建,慢慢维护索引。    

聚簇索引:
     MySQL InnoDB一定会建立聚簇索引,把实际数据行和相关的键值保存在一块,这也决定了一个表只能有一个聚簇索引,即MySQL不会一次把数据行保存在二个地方。

     1)  InnoDB通常根据主键值(primary key)进行聚簇
     2) 如果没有创建主键,则会用一个唯一且不为空的索引列做为主键,成为此表的聚簇索引
     3) 上面二个条件都不满足,InnoDB会自己创建一个虚拟的聚集索引


优点:
      聚簇索引的优点,就是提高数据访问性能。聚簇索引把索引和数据都保存到同一棵B+树数据结构中,并且同时将索引列与相关数据行保存在一起。这意味着,当你访问同一数据页不同行记录时,已经把页加载到了Buffer中,再次访问的时候,会在内存中完成访问,不必访问磁盘。不同于MyISAM引擎,它将索引和数据没有放在一块,放在不同的物理文件中,索引文件是缓存在key_buffer中,索引对应的是磁盘位置,不得不通过磁盘位置访问磁盘数据。
  
缺点:
1) 维护索引很昂贵,特别是插入新行或者主键被更新导至要分页(page split)的时候。建议在大量插入新行后,选在负载较低的时间段,通过OPTIMIZE TABLE优化表,因为必须被移动的行数据可能造成碎片。使用独享表空间可以弱化碎片
   
2) 表因为使用UUId作为主键,使数据存储稀疏,这就会出现聚簇索引有可能有比全表扫面更慢,所以建议使用int的auto_increment作为主键 

3) 如果主键比较大的话,那辅助索引将会变的更大,因为辅助索引的叶子存储的是主键值;过长的主键值,会导致非叶子节点占用占用更多的物理空间 
 
辅助索引
      在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找。辅助索引叶子节点存储的不再是行的物理位置,而是主键值。通过辅助索引首先找到的是主键值,再通过主键值找到数据行的数据叶,再通过数据叶中的Page Directory找到数据行。


复合索引
     由多列创建的索引称为符合索引,在符合索引中的前导列必须出现在where条件中,索引才会被使用
ALTER TABLE `test`.`users` ADD INDEX `idx_users_id_name` (`name`(10) ASC, `id` ASC) ;

 

前缀索引
     当索引的字符串列很大时,创建的索引也就变得很大,为了减小索引体积,提高索引的扫描速度,就用索引的前部分字串索引,这样索引占用的空间就会大大减少,并且索引的选择性也不会降低很多。而且是对BLOB和TEXT列进行索引,或者非常长的VARCHAR列,就必须使用前缀索引,因为MySQL不允许索引它们的全部长度。

使用:
     列的前缀的长度选择很重要,又要节约索引空间,又要保证前缀索引的选择性要和索引全长度选择性接近。

 

唯一索引
唯一索引比较好理解,就是索引值必须唯一,这样的索引选择性是最好的

 

主键索引
     主键索引就是唯一索引,不过主键索引是在创建表时就创建了,唯一索引可以随时创建。

说明
主键和唯一索引区别
     1) 主键是主键约束+唯一索引
     2) 主键一定包含一个唯一索引,但唯一索引不是主键
     3) 唯一索引列允许空值,但主键列不允许空值
     4) 一个表只能有一个主键,但可以有多个唯一索引

 

索引扫描方式:
紧凑索引扫描(dense index):
     在最初,为了定位数据需要做权表扫描,为了提高扫描速度,把索引键值单独放在独立的数据的数据块里,并且每个键值都有个指向原数据块的指针,因为索引比较小,扫描索引的速度就比扫描全表快,这种需要扫描所有键值的方式就称为紧凑索引扫描

 

松散索引扫描(sparse index):
     为了提高紧凑索引扫描效率,通过把索引排序和查找算法(B+trre),发现只需要和每个数据块的第一行键值匹配,就可以判断下一个数据块的位置或方向,因此有效数据就是每个数据块的第一行数据,如果把每个数据块的第一行数据创建索引,这样在这个新创建的索引上折半查找,数据定位速度将更快。这种索引扫描方式就称为松散索引扫描。

 

覆盖索引扫描(covering index):
     包含所有满足查询需要的数据的索引称为覆盖索引,即利用索引返回select列表中的字段,而不必根据索引再次读取数据文件


索引相关常用命令:
1) 创建主键
 CREATE TABLE `pk_tab2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a1` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

2) 创建唯一索引
create unique index indexname on tablename(columnname); 
alter table tablename add unique index indexname(columnname);

 

3) 创建单列一般索引
create index indexname on tablename(columnname);
alter table tablename add index indexname(columnname);

 

4) 创建单列前缀索引
create index indexname on tablename(columnname(10));    //单列的前10个字符创建前缀索引
alter table tablename add index indexname(columnname(10)); //单列的前10个字符创建前缀索引

 

5) 创建复合索引
create index indexname on tablename(columnname1,columnname2);    //多列的复合索引
create index indexname on tablename(columnname1,columnname2(10));    //多列的包含前缀的复合索引
alter table tablename add index indexname(columnname1,columnname2); //多列的复合索引
alter table tablename add index indexname(columnname1,columnname(10)); //多列的包含前缀的复合索引

 

6) 删除索引
drop index indexname on tablename;;
alter table tablename drop  index indexname;

 

7) 查看索引
show index from tablename;
show create table pk_tab2;



面试MySQL所需要知道的:索引和SQL优化(上)B+树、聚簇索引和二级索引、覆盖索引、索引下推 索引 阅读详情

相关推荐

Avellaneda & Stoikov’s market-making strategy 工程化处理

前2篇文章详细介绍了AS存货模型的做市策略,这次对于这些公式里面一些希腊字母的取值是如何计算的,如何做工程化并应用到生产环境中做一些说明。这个里面有一些重要参数:很直观,可以直接取值的有:s = current market mid price (中间价,也就是【最佳卖价+最佳买价】/2)q = quantity of assets in inventory of base asset (也就是买入多少价值的股票数量)

weixin_42480337的博客 7068

[转]聚簇索引与非聚簇索引(也叫二级索引)

通俗点讲 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因 澄清一个概念:innodb中,在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非聚簇索引都是辅助索引,像复合索引、前缀索引

mtsbv110的专栏 861

AI图像识别在临电配电箱安全检测中的应用与实践

计算机视觉与AI图像识别技术正逐步改变传统工业检测方式。通过深度学习模型如YOLOv5和ResNet,系统能自动识别设备元件并分析其状态,大幅提升检测效率和准确性。这种技术特别适用于需要严格遵循行业标准的场景,如临电配电箱的安全检测。将《施工现场临时用电安全技术规范》等条文转化为可量化的算法,AI系统能自动检查PE线连接、漏保功能等关键项目。实际应用表明,此类解决方案可使电气事故率下降90%以上,同时检测耗时缩短80%,为工地安全提供了智能化保障。

weixin_29042035的博客 328

innodb索引概念

author:skate time:2013/04/09   总结记录下innodb的索引概念,以备查看   innodb索引分类: 聚簇索引(clustered index)     1)  有主键时,根据主键创建聚簇索引     2)  没有主键时,会用一个唯一且不为空的索引列做为主键,成为此表的聚簇索引     3) 如果以上两个都不满足那innodb自己创建一个虚拟的聚集

冰刀(skate) 6767

从TCGA官网获取新版count数据并精准转换为TPM的实战指南

本文详细介绍了从TCGA官网获取新版count数据并精准转换为TPM的实战指南。通过TCGAbiolinks工具下载原始count数据,结合GENCODE v36注释文件计算基因有效长度,最终实现count到TPM的标准化转换,确保数据完整性和分析可靠性。文章包含完整代码示例和常见问题解决方案,特别适合生物信息学研究人员参考。

weixin_27310417的博客 283

YOLOv5+Astra Pro Plus深度相机:手把手教你实现实时目标检测(附ROS配置技巧)

本文详细介绍了如何将YOLOv5目标检测算法与Astra Pro Plus深度相机结合,构建实时目标检测系统。内容涵盖从硬件选型、环境搭建、ROS配置到YOLOv5部署与深度信息融合的完整流程,并分享了性能优化、避障算法等实战技巧,帮助开发者在机器人视觉等场景中快速实现智能感知应用。

weixin_28292761的博客 387

聚簇索引,二级索引与联合索引的概念

聚簇索引,二级索引与联合索引的概念

m0_49535395的博客 3518

Cadence学习之路(六)元器件封装绘制

使用Allegro PCB Designer绘制元器件封装

qq_46757048的博客 1万+

【mysql】聚簇索引(聚集索引)和非聚簇索引(二级索引、辅助索引)的区别

在《数据库原理》一书中是这么解释聚簇索引和非聚簇索引的区别的: 聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。 在mysql数据库中,myisam引擎和innodb引擎使用的索引类型不同,myisam对应的是非聚簇索引,而innodb对应的是聚簇索引。聚簇索引也叫复合索引、聚集索引等等。 聚簇索引:“聚簇”的意思是数据行被按照一定顺序一个个紧密地排列在一起存储。一个表只能有一个聚簇索引,因为在一个表中数据的存放方式只有一种。 试想如果允许存在多个表

m0_45406092的博客 1万+

多线程开发的基本概念

在Android开发中,我们常常会遇到多线程开发的需求。由于Android中的,我们不能在主线程处理耗时逻辑,否则会导致卡顿,甚至出现ANR(应用无响应)等异常情况。因此,我们需要将网络请求等耗时操作放到中去执行,完成后再更新UI。多线程开发因此成为Android开发中的一个重要部分。随着Android开发技术的不断进步,从早期的使用Handler,到后来的RxJava,再到如今的Kotlin协程,切换线程以及并发编程的代码写起来是越来越简洁了。

喻志强的博客 1018

使用CiteSpace软件对知网文献进行关键词共现/聚类/突现分析

一、基本概念CiteSpace(引文空间)是一款专注于分析科学分析中蕴含的潜在知识的软件。它是在科学计量学、数据可视化背景下逐渐发展起来的引文可视化分析软件。通过可视化的手段,CiteSpace能够呈现科学知识的结构、规律和分布情况,并因此将这种分析得到的可视化图形称为“科学知识图谱”。二、主要功能和用途知识图谱构建:根据科学文献的引用关系,CiteSpace可以生成知识图谱,帮助研究人员更好地理解学术领域中不同文献之间的联系和演化过程。主题聚类分析。

m0_64336780的博客 1万+

MySQL的聚簇索引和二级索引

索引按照物理实现方式,索引可以分为 2 种:聚簇(聚集)和非聚簇(非聚集)索引。也可以把非聚集索引称为二级索引或者辅助索引。

YouPromise的博客 1056

Python爬虫实战:手把手教你如何抓取农作物品种名录,构建标准化种业索引数据库!

我长期专注 Python 爬虫工程化实战,主理专栏 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 290

mysql建立聚簇索引_Mysql聚簇索引和二级索引到底有何不同

作者:小歪同学问题聚簇索引存储结构是如何的?二级索引存储结构又如何?什么是覆盖索引?怎么判断能不能用到索引?准备CREATE TABLE `book` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `author` varchar(20) DEFAULT NULL, `publis...

weixin_35713233的博客 163

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Mysql 的 聚簇索引和二级索引

原文地址:《聚簇索引和二级索引》 目录​​​​​ 1、索引的简述 (1)聚簇索引 (2)非聚簇索引 二级索引(辅助索引) 2、示例 聚簇索引(主键索引) 二级索引(辅助索引) 3、结论 结论一 结论二 ------------------------------------------------------------------------————————————————————————————————- 1、索引的简述 (1)聚簇索引 索引和数据存储在一块( 都存储在同一

ye1223的博客 915

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【MySQL】一篇讲懂什么是聚簇索引和非聚簇索引(二级索引)以及什么是回表?

叶子节点直接存储了。

L1951381654的博客 801

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

MySQL聚簇索引和二级索引的区别

主键索引的叶子节点存的是整行数据。在InnoDB里,主键索引也被称为聚簇索引(clustered index)。 非主键索引的叶子节点内容是主键的值。在InnoDB里,非主键索引也被称为二级索引(secondary index)。 也就是说,基于非主键索引的查询需要多扫描一棵索引树。因此,我们在应用中应该尽量使用主键查询。 聚簇索引 聚簇索引有两个特点: 使用记录主键值的大小进行记录和页的排序,这包括三个方面的含义: 页内的记录是按照主键的大小顺序排成一个单向链表。 各个存放用户记录的页也是根据页中用

ggh0314的博客 903

mysql的聚簇 索引和二级索引

1、聚簇索引简单来说 一般都是建立在主键上的 因为聚簇索引需要存储所有的数据 包含的列可以是被隐藏的rowid列 也可以是自增长的id列 2、二级索引 除了聚簇索引之外 都是二级索引 二级索引可以有多个 但是不是越多越好 建立一个索引是为了查找数据更方便 但是这是牺牲写入的性能,一位每个索引在写入数据的时候需要维护索引数据 是最新,最准备的 索引越多写入性能越差,上锁的时间也会越来越长,如果...

rb_Russell的博客 4350

MySQL中InnoDB的一级索引、二级索引 即聚簇索引 密集索引和稀疏索引

转自https://blog.youkuaiyun.com/roxliu/article/details/70160664 每个InnoDB表具有一个特殊的索引称为聚簇索引(也叫聚集索引,聚类索引,簇集索引)。 如果表上定义有主键,该主键索引就是聚簇索引。如果未定义主键,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为主键,InnoDB使用它作为聚簇索引。如果没有这样的列,...

AAA821的专栏 2115

mysql 聚簇索引和非聚簇索引_Mysql聚簇索引和二级索引到底有何不同

作者:小歪同学问题聚簇索引存储结构是如何的?二级索引存储结构又如何?什么是覆盖索引?怎么判断能不能用到索引?准备CREATE 什么是聚簇索引和二级索引book表中,我们创建了3个索引,id 主键索引, idx_name 和 idx_author_name 2个非主键索引。从定义来讲,主键索引就是聚簇索引,而非主键索引就是二级索引。一般情况下所有都是B+TREE结构的,除非特别指定所有为HASH结构...

weixin_39653622的博客 139

mysql二级索引_Mysql聚簇索引和二级索引到底有何不同

作者:小歪同学问题聚簇索引存储结构是如何的?二级索引存储结构又如何?什么是覆盖索引?怎么判断能不能用到索引?准备CREATE TABLE `book` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`author` varchar(20) DEFAULT NULL,`published` date DE...

weixin_32941303的博客 132

mysql 聚簇索引 和聚簇索引 (二级索引)的 那些事

mysql的聚簇索引是指innodb引擎的特性,mysiam并没有,如果需要该索引,只要将索引指定为主键(primary key)就可以了。 比如: create table blog_user ( user_Name char(15) not null check(user_Name !=''), user_Password char(15) not null, user_emi

大树叶 技术专栏 2万+

mysql 聚簇索引和非聚簇索引_聚簇索引与非聚簇索引(也叫二级索引)

通俗点讲聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因澄清一个概念:innodb中,在聚簇索引之上创...

weixin_39772566的博客 123

【MySQL面试复习】什么是聚簇索引(聚集索引)和非聚簇索引(二级索引)/什么是回表?

在InnoDB存储引擎中,聚簇索引是必须有并且只有一个。MyISAM中没有聚簇索引。回表就是,先查找非聚簇索引的B+树,找到叶子结点后,因为叶子结点保存的是主键的值,所以还要拿着这个主键去查找主键索引的B+树,主键索引一般是聚簇索引,这样进行两次B+树的查找就是回表。

m0_60511809的博客 347

mysql聚簇索引和非聚簇索引以及二级索引

mysql聚簇索引和非聚簇索引以及二级索引 innodb的聚簇索引实际上是在同一个结构中保存了btree索引和数据行。 INNODB通过主键列来索引数据。没有定义,INNODB会选择一个唯一的非空索引列代替。如果没有这样的索引,会选择第一个非空的唯一索引代

没有用户名的博客 3749
上一篇: MySQL 体系架构 Oracle体系架构 PostgreSQL体系架构
下一篇: MySQL5.7.17主从复制搭建(一主一从)教程详解
听雪楼主.
博客等级 码龄10年 513粉丝 214原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值