MySQL索引的理解(主键索引和二级索引)

作者&投稿:杜烁 (若有异议请与网页底部的电邮联系)
~

深入理解MySQL索引:主键与二级索引的角色


索引,如同书籍的索引,是数据库中的神器,它极大地提升查询效率。MySQL中的索引主要有两种类型:一级索引和二级索引,它们各有其独特的特点和应用场景。


一级索引:数据的守护者


一级索引,也被称为主键索引,它的核心地位不容忽视。它与数据共存于B+树的叶子节点,是每个记录的唯一标识。在InnoDB存储引擎中,主键索引是聚集索引,这意味着数据本身被直接存储在索引中,查询速度极快,尤其适用于查找和范围查询。


二级索引:辅助导航


二级索引则是在一级索引的基础上建立的,它以一级索引(主键)作为索引,辅助查找数据。叶子节点存储的是主键值,通过这个线索,数据库可以快速定位到一级索引,再进行数据查找。二级索引在处理非主键列的查询时大显身手,但插入和更新操作可能需要两步查找,效率相对较低。


B+树的力量


索引结构的选择往往取决于B+树的特性。B+树结构的特点是叶子节点只存储指向实际数据的指针,这意味着范围查询和全表扫描更为高效。例如,学生表中如果按照last_name、first_name和birthday排序,这些特性决定了哪些查询可以快速执行。


查询策略揭秘



  • 全值匹配、最左前缀、列前缀和范围值查询得益于B+树的高效设计,特别是对于列并范围匹配,如last_name全匹配与first_name以K开头的查询。


索引的奥秘与局限


虽然索引能带来便利,但并非万能。限制包括非最左列查找、特定列的范围查询,以及哈希索引的排序、部分匹配和范围查找限制。哈希索引虽然查找速度快,但不支持排序和范围查找,适用于精确匹配的情况。


InnoDB与MyISAM的对比中,聚集索引的优势在于数据紧凑,查询速度快,但代价是插入速度减缓。选择顺序主键(如自增)时,能确保快速的插入和读取,避免了随机聚集索引(如UUID)带来的插入效率和空间浪费。更新聚集索引时,由于需要查找两次,操作成本较高。




oracle的数据导入到mysql中,遇到一个时间转换问题
由于MySQL本身数据结构的限制,一个16K的数据页最少要存储两行数据,因此单行数据不能超过65,535 bytes,因此针对这种情况有两种解决方式: 根据实际存储数据的长度,对超长的varchar列进行收缩; 对于无法收缩的列转换数据类型为text,但这在使用过程中可能导致一些性能问题; 2. 与第一点类似,在Innodb存储引擎中,索引前缀...

php程序员怎么达到不同等级?
典型事件:join、order by、group by等语句性能一塌糊涂,数据库根本没有设计(仅限于拆成一个主表,N个附表等),搞不清字段类型及作用,碰到大表的复杂查询就没辙。◆20%这个群体的人只是MySQL运行机制理解不透彻,对影响MySQL性能的关健因素把握不明确,不熟练。典型事件:熟读手册,但说不清索引...

django中model的功能是什么?
在django1.6中,ORM默认会autocommit每一个数据库查询,也就是说,每次使用m.create()或m.update()时,在数据库中马上就会做出相应的修改.这样做的好处就是简化了初学者对ORM的理解.但坏处就是,当一个view中包含两个数据库修改,可能一个成功,但另一个失败,这就可能导致数据库不完整,给我们带来很大的危险. 解决这...

数据库语言有哪些
数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。数据查询语言(DQL),例如:SELECT语句。(一般不会单独归于一类,因为只有一个语句)。数据控制语言(DCL),例如:GRANT、REVOKE等语句。事务控制语言(TCL),例如:...

mysql 只有主键能自动增长么
不一定的,MySQL 每张表只能有1个自动增长字段,这个自动增长字段即可作为主键,也可以用作非主键使用,但是请注意将自动增长字段当做非主键使用时必须必须为其添加唯一索引,否则系统将会报错。例如:-- 将自动增长字段设置为主键 create table t1 (id int auto_increment Primary key,sid int);-- 将...

开源搜索的20款开源搜索引擎系统
Lucen提供一组解读,过滤,分析文件,编排和使用索引的API,它的强大之处除了高效和简单外,是最重要的是使使用者可以随时应自己需要自订其功能。Oxyus是一个纯java写的web搜索引擎。BDDBotBDDBot是一个简单的易于理解和使用的搜索引擎。它目前在一个文本文件(urls.txt)列出的URL中爬行,...

北大青鸟设计培训:学大数据怎么快速找到工作?
除开以上技术之外,还需要熟悉sql,熟悉数据库设计;熟悉hadoop平台的机制和原理,具备相关产品项目应用研发经验;熟悉python,java等,熟悉linux;熟练使用主流数据库,如MySQL、SQLServer、Oracle、PostgreSQL等,对于数据库存储和索引机制有较深理解等等。3:学大数据怎么快速找到工作?当你能够熟练掌握以上技能的...

黑马程序员Linux运维培训怎么样?
数据库DBA:MySQL概述,MySQL5.7安装,MySQL配置,MySQL基本操作、SQL语句详解、MySQL索引、MySQL备份与还原、MySQL主从复制、MHA高可用架构、MySQL企业级应用实战 学完此阶段课掌握的核心能力: 1、了解Linux系统运行原理,实现Linux服务器的维护与管理; 2、了解Linux系统相关服务,能根据企业需求实现企业运维工作。

深度干货|云原生分布式数据库PolarDB-X的技术演进
PolarDB-X的透明分布式提供了分区表、全局索引、OnlineDDL等技术,使得用户的业务能够以很低的成本接入到分布式数据库中,并且后续随着业务的发展,数据库还可以做通过Scale-Up或者Scale-Out的方式提高性能。(三)HTAP技术,如何提高分析能力 所谓HTAP,在PolarDB-X的理解中,即能否在线上数据库中执行复杂查询。它的价值有两...

术语“DBA”指的是
数据库管理员(Database Administrator,简称DBA),从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于运维工程师的一个分支,主要负责业务数据库从设计、测试到部署交付的全生命周期管理。DBA的核心目标是保证数据库管理系统的稳定性、安全性、完整性和高性能。在国外,也有公司把DBA称作数据库...

桃江县19450704077: mysql里,索引和主键的区别 . -
泰曹路滴: 主键(primary key) 能够唯一标识表中某一行的属性或属性组.一个表只能有一个主键,但可以有多个候选索引.主键常常与外键构成参照完整性约束,防止出现数据不一致.主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自...

桃江县19450704077: mysql 中主键和索引的关系和说明 -
泰曹路滴: 主键是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录.;使用索引可快速访问数据库表中的特定信息.索引是对数据库表中一列或多列的值进行排序的一种结构,只有当经常查询索引列中的数据时,才需要在表上创建索引.索引占用磁盘空间,并且降低添加、删除和更新行的速度.当然索引也有好处就是查询速度快,它利还是大于弊的所以请慎重使用索引. 比如:一个学生表(t_stu )有1000条数据,给它id列建个主键和索引,你想查询id=1000;的这条信息,如果没有索引,它就一条一条的比对查找,系统运行1000次才找到,要是创建了索引,你查询id=1000的这条信息,系统只运行一次就找到了.

桃江县19450704077: mysql主键和唯一索引的区别 -
泰曹路滴: 主键和唯一索引都要求值唯一,但是它们还是有区别的:①.主键是一种约束,唯一索引是一种索引;②.一张表只能有一个主键,但可以创建多个唯一索引;③.主键创建后一定包含一个唯一索引,唯一索引并一定是主键;④.主键不能为null,唯一索引可以为null;⑤.主键可以做为外键,唯一索引不行;

桃江县19450704077: mysql索引类型解释
泰曹路滴: 索引分单列索引和组合索引.单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引.组合索引,即一个索包含多个列. MySQL索引类型包括: (1)普通索引 这是最基本的索引,它没有任何限制.它有以下几...

桃江县19450704077: mysql 什么是二级索引 -
泰曹路滴: mysql中每个表都有一个聚簇索引(clustered index ),除此之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引(secondary indexes). 以InnoDB来说,每个InnoDB表具有一个特殊的索引称为聚集索引.如果您的表上定义有主键,该主键索引是聚集索引.如果你不定义为您的表的主键 时,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为主键,InnoDB使用它作为聚集索引.如果没有这样的列,InnoDB就自己产生一个这样的ID值,它有六个字节,而且是隐藏的,使其作 为聚簇索引.

桃江县19450704077: mysql中,主键与普通索引的区别是什么? -
泰曹路滴: 1.主键的值不可以改变,唯一键的值可以改变成另一个也是唯一的值2.对外的应用程序接口如ODBC或者JAVA中的Hibernate通常都是以主键来加载记录3.唯一键的列可以改成not unique,而主键却不能

桃江县19450704077: 请简述Mysql中的索引是什么? - 上学吧
泰曹路滴: 面试的时候肯定会问这一个问题,mysql为什么会选择b+树作为索引呢?而不选择其他索引,例如b树?hash?下面说的磁盘IO是指数据从硬盘加载到内存中的操作 hash索引的话,不支持范围查询,因为hash就是一个键对应一个值的,没办法范...

桃江县19450704077: MySQL主键和索引之间有什么关系? -
泰曹路滴: 主键通常用来保证数据的唯一性 索引用来给字段添加约束规则,索引的种类较多,比如唯一索引.

桃江县19450704077: mysql有哪些索引 -
泰曹路滴: 从数据结构角度1、B+树索引(O(log(n))):关于B+树索引,可以参考 MySQL索引背后的数据结构及算法原理2、hash索引:a 仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询 b 其检索效率非常高,索引的检索可以一次定位...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网