首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL进阶篇(02):索引体系划分,B-Tree结构说明

,如何分类取决多个场景和不同的角度,常见的划分如下: 产生作用:主键索引,普通索引,非空索引,全文索引; 覆盖字段:单列索引,组合索引; 数据结构:B-Tree索引,哈希索引,R-Tree索引; 注意:...二、索引用法详解 1、不同索引特点 普通索引 基本的索引,没有任何使用限制,主要用来加速数据查询。适合经常出现在查询条件或排序条件中的数据列。...主键索引 特殊的唯一索引,不允许有空值,在建表的时候指定主键,就会创建主键索引,MySQL中最核心的索引,大量的业务数据都是基于主键查询。...唯一索引 普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须是唯一性的。...,判断是否符合条件; 不断执行上述逻辑,直到查询完成; 注意:必须要强调一点,查询必须是在执行索引的基础上,才是该逻辑,正常的开发中多分析一下查询语句,有时候可能只是自己感觉查询索引是执行的,实际可能是失效的

49210

全栈必备之SQL简明手册

条件 字符串处理:TRIM,LTRIM,RTRIM,REPLACE,Substring,LOWER,UPPER 查询嵌套:在 select 、from、where 中使用 select 语句 存储过程创建与使用...关于JOIN JOIN用于根据两个或多个表之间的列之间的关系,从这些表中查询数据。它允许用户将不同表中的相关数据连接起来,从而形成一个更完整和有意义的数据集。 JOIN基于表之间的关联键进行连接操作。...重复值处理:UNION操作中,默认会删除重复的结果行,只保留唯一的行。如果需要包含重复的行,可以使用UNION ALL操作。...常见技巧 建立并使用索引 在WHERE子句中使用的列和JOIN子句中的使用列上创建索引,这样可以加快数据检索,索引是为了允许快速检索数据页而组织的。...浅析数据工程 一文读懂 Data Mesh 数据架构中的数据问题 温故知新:数据科学札记 数据摘要的常见方法 web系统中的结构化数据标记 基于CRDT的数据最终一致性 数据系统读写权衡的一知半解 面向

33810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ❤『知识集锦』一文搞懂mysql索引!!(建议收藏)

    表中R1~R5的(ID,k)值分别为(100,1)、(200,2)、(300,3)、(500,5)、(600,6),每一个索引在InnoDB里面对应一棵B+树,两棵树的简意示意图如下: 2.2 主键索引和普通索引的区别...也就是说,基于非主键索引的查询需要多扫描一棵索引树,因此,我们在应用中应该尽量使用主键查询。...2.3 唯一索引vs普通索引 从查询上来说 对于普通索引来说,查找到满足条件的第一个记录后,需要查找下一个记录,直到碰到第一个不满足条件的记录。...对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。...从更新上来说 A  如果目标页在内存中: 对于唯一索引来说,找到3和5之间的位置,判断有没有冲突,插入这个值,语句执行结束; 对于普通索引来说,找到3和5之间的位置,插入这个值,语句执行结束。

    76420

    数据库系统概念

    大于等于 ≥、小于 条件,行运算,从关系R中选择符合条件的元组构成新的关系投影π:选择操作,SELECT...指定列(属性),列运算,从关系R中选择若干属性组成新的关系并∪:R∪S,在关系R或关系S或两者中的元素的集合,一个元素在并集中只出现一次,R和S是同类型的,对应的属性集(字段列表)相同、属性次序相同、属性名可不同交...∩:R∩S,在R和S中都存在的元素的集合,一个元素在交集中只出现一次,R和S是同类型的差-:R-S,在R中而不在S中的元素的集合,R∩S=R-(R-S),R和S是同类型的笛卡尔积X:RXS,是R与S的无条件连接...,使任意两个关系的信息能组合在一起条件连接θ:从R×S的结果集中,选取在指定的属性集上满足θ条件的元组,组成新的关系,其中θ 是一个关于属性集的逻辑表达式自然连接⋈:从R×S的结果集中,选取在某些公共属性上具有相同值的元组...笛卡尔积X:广义连接,所有行进行组合,字段拼接,行交叉组合,一般没有使用意义条件连接θ:在广义连接的结果中,施加条件,加以选择,留下符合要求的元组自然连接⋈:参与连接的表,必须具有相同的属性列,在某些公共属性上具有相同值的元组外连接

    23432

    一条简单的更新语句,MySQL是如何加锁的?

    看如下一条sql语句: # table T (id int, name varchar(20)) delete from T where id = 10; MySQL在执行的过程中,是如何加锁呢?...组合三:id不唯一索引+RC 该组合中,id列不在唯一,而是个普通索引,那么当执行sql语句时,MySQL又是如何加锁呢?看下图: ?...那么该如何解决这个问题呢?如何保证多次当前读返回一致的记录,那么就需要在多个当前读之间,其他事务不会插入新的满足条件的记录并提交。为了实现该结果,Gap锁就应运而生。...结论:在RR隔离级别下,id列上有非唯一索引,对于上述的SQL语句;首先,通过id索引定位到第一条满足条件的记录,给记录加上X锁,并且给Gap加上Gap锁,然后在主键聚簇索引上满足相同条件的记录加上X锁...一条简单的删除语句加锁情况也就分析完成了,但是学习不止于此,还在继续,对于复杂SQL语句又是如何加锁的呢?MySQL中的索引的分析又是怎样的呢?性能分析、性能优化这些又是怎么呢?

    3.7K20

    Oracle-index索引解读

    索引对用户是透明的,无论表上是否有索引,sql语句的用法不变 oracle创建主键时会自动在该列上创建索引 ---- 为什么需要索引 数据在磁盘上是以块的形式存储的。...创建新索引时收集统计信息 7)NOCOMPRESS | COMPRESS:是否使用“键压缩”(使用键压缩可以删除一个键列中出现的重复值) 8)NOSORT | REVERSE:NOSORT表示与表中相同的顺序创建索引...SELECT语句不会受到这种锁定问题的影响。 基于规则的优化器不会考虑位图索引。 当执行ALTER TABLE语句并修改包含有位图索引的列时,会使位图索引失效。...在表上创建的索引越多,INSERT、UPDATE和DELETE语句的执行就会花费越多的时间。...用EXISTS替代IN、用NOT EXISTS替代NOT IN 在许多基于基础表的查询中, 为了满足一个条件, 往往需要对另一个表进行联接.

    91240

    这是我见过最有用的Mysql面试题,面试了无数公司总结的(内附答案)

    RDBMS代表- [R elational d atabase中号anagement小号ystem。 RDBMS是基于关系模型的数据库管理系统(DBMS)。...可以在一个列或一组列上创建索引。 18.所有不同类型的索引是什么? 索引有三种类型 1.唯一索引:唯一索引通过确保表中没有两行数据具有相同的键值来帮助维护数据完整性。...这是重要的Oracle DBA面试问题之一。 自动增量关键字使用户可以创建一个唯一的数字,以便在将新记录插入表中时生成该数 字。每当使用主键时,都可以使用自动递增关键字。...在SQL Server中,数据库表中的每一列都有一个名称和一种数据类型。 在创建SQL表时,我们需要决定在表的每一列中存储哪种数据类型。 57.可以在BOOLEAN数据字段中存储哪些可能的值?...我们可以在DELETE语句中使用WHERE条件,并可以删除所需的行 我们不能在TRUNCATE语句中使用WHERE条件。

    27.1K20

    《高性能Mysql》学习笔记(三)

    不能跳过索引中的列 如果查询中有「某个列的范围查询」,则其右边所有的列都无法使用优化查询 哈希索引 基于哈希表实现,只有精确匹配索引所有列的查询才有效 mysql中只有 Memory 引擎支持哈希索引...,会在内存中基于B-Tree 索引创建一个哈希索引 创建自定义哈希索引 在B-Tree 上创建一个伪哈希索引 如下: 创建一个伪哈希索引;但是这样会有很高的查询开销 使用下面语句可以对于性能的极大提升...基于语句的复制 复制解决的问题 数据分布 通常不会给宽带造成很大压力 负载均衡 可以将读操作分布到多个服务器上面 数据备份 高可用和故障切换 避免Mysql 单点失败 mysql 升级测试 复制如何工作...mysql 如何复制数据 在主库把数据更改记录到二进制日志中(二进制日志事件) 备库将主库的日志复制到自己的中继日志 备库读取中继日志的时间,将其重放到备库数据之上 配置复制 配置步骤: 在每台服务器上复制账号...一主多备库 主动-主动模式下的主-主复制 和 主动-被动模式下的主-主复制 如何配置主-主服务器对,在两台服务器执行对称后,使其拥有相同的配置 确保两台服务器数据相同 启用二进制日志,选择唯一服务器id

    1.3K20

    MySQL索引15连问,抗住!

    R-Tree索引: 用来对GIS数据类型创建SPATIAL索引 物理存储维度 聚集索引:聚集索引就是以主键创建的索引,在叶子节点存储的是表中的数据。...(Innodb存储引擎) 非聚集索引:非聚集索引就是以非主键创建的索引,在叶子节点存储的是主键和索引列。(Innodb存储引擎) 逻辑维度 主键索引:一种特殊的唯一索引,不允许有空值。...普通索引:MySQL中基本索引类型,允许空值和重复值。 联合索引:多个字段创建的索引,使用时遵循最左前缀原则。 唯一索引:索引列中的值必须是唯一的,但是允许为空值。...查询条件包含or,可能导致索引失效 如果字段类型是字符串,where时一定用引号括起来,否则索引失效 like通配符可能导致索引失效。 联合索引,查询时的条件列不是联合索引中的第一个列,索引失效。...可以参考以下方法: 先创建一张跟原表A数据结构相同的新表B。 在新表B添加需要加上的新索引。 把原表A数据导到新表B rename新表B为原表的表名A,原表A换别的表名; 12.

    1.5K30

    PostgreSQL 教程

    最后,您将学习如何管理数据库表,例如创建新表或修改现有表的结构。 第 1 节. 查询数据 主题 描述 简单查询 向您展示如何从单个表中查询数据。 列别名 了解如何为查询中的列或表达式分配临时名称。...管理表 在本节中,您将开始探索 PostgreSQL 数据类型,并向您展示如何创建新表和修改现有表的结构。 主题 描述 数据类型 涵盖最常用的 PostgreSQL 数据类型。...创建表 指导您如何在数据库中创建新表。 SELECT INTO 和 CREATE TABLE AS 向您展示如何从查询的结果集创建新表。...了解 PostgreSQL 约束 主题 描述 主键 说明在创建表或向现有表添加主键时如何定义主键。 外键 展示如何在创建新表时定义外键约束或为现有表添加外键约束。...检查约束 添加逻辑以基于布尔表达式检查值。 唯一约束 确保一列或一组列中的值在整个表中是唯一的。 非空约束 确保列中的值不是NULL。 第 14 节.

    59010

    MySQL查询优化之道

    01 查询优化器模块 查询优化器的任务是发现执行 SQL 查询的最佳方案。大多数查询优化器,要么基于规则、要么基于成本。...前一个表就是指 id 列的值比当前表的 id 小的表。这一列只有在 EXPLAIN EXTENDED 语句中才会出现。 3....R-Tree 索引:主要解决空间数据检索问题,极少使用。 06 索引相关优化 1. 如何判断是否需要创建索引 频繁作为查询条件的字段应该创建索引。 唯一性太差的字段不适合单独创建索引。...如果使用的是 hash 索引,在做非等值连接时候无法使用索引,会是全表扫描的操作。 在 MySQL 中 BLOB 和 Text 类型的列只能创建前缀索引。...(好像从 5.7 之后,大多默认 innodb 存储引擎) 当有唯一性索引和非唯一性索引都存在时,往往只会选择唯一性索引。 组合索引,查询时组合索引第一列出现的时候会使用索引。 3.

    1.4K40

    数据库原理笔记「建议收藏」

    若属性A是基本关系R的主属性,则属性A不能取空值;关系模型中以主码作为唯一性标识。...] ); 如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。...属性上的约束条件的定义 CREATE TABLE时定义 列值非空(NOT NULL) 列值唯一(UNIQUE) 检查列值是否满足一个布尔表达式(CHECK) 属性上的约束条件检查和违约处理...Y]=s[Y],v[Z]=t[Z](即交换s,t元组的Y值所得的两个新元组必在r中),则Y多值依赖于X,记为X→→Y。...被关闭的游标可以再次被打开,与新的查询结果相联系 CURRENT形式的UPDATE语句 CURRENT形式的UPDATE语句和DELETE语句的用途 面向集合的操作 一次修改或删除所有满足条件的记录

    1.9K22

    MySQL索引原理、失效情况

    表中R1~R5的(ID,k)值分别为(100,1)、(200,2)、(300,3)、(500,5)、(600,6),每一个索引在InnoDB里面对应一棵B+树,两棵树的简意示意图如下: 1.2 主键索引和普通索引的区别...也就是说,基于非主键索引的查询需要多扫描一棵索引树,因此,我们在应用中应该尽量使用主键查询。...1.3 唯一索引vs普通索引 从查询上来说 对于普通索引来说,查找到满足条件的第一个记录后,需要查找下一个记录,直到碰到第一个不满足条件的记录。...对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。...从更新上来说 A  如果目标页在内存中: 对于唯一索引来说,找到3和5之间的位置,判断有没有冲突,插入这个值,语句执行结束; 对于普通索引来说,找到3和5之间的位置,插入这个值,语句执行结束。

    1.2K11

    MySQL更新语句加锁

    看如下一条sql语句: # table T (id int, name varchar(20)) delete from T where id = 10; MySQL在执行的过程中,是如何加锁呢?...组合三、id不唯一索引+RC 该组合中,id列不在唯一,而是个普通索引,那么当执行sql语句时,MySQL又是如何加锁呢?...与组合er的唯一区别,组合二最多只有一个满足条件的记录,而在组合三中会将所有满足条件的记录全部加上锁。 结论:若id列上有非唯一索引,那么对应的所有满足SQL查询条件的记录,都会加上锁。...整编:微信公众号,搜云库技术团队,ID:souyunku 那么该如何解决这个问题呢?如何保证多次当前读返回一致的记录,那么就需要在多个当前读之间,其他事务不会插入新的满足条件的记录并提交。...一条简单的删除语句加锁情况也就分析完成了,但是学习不止于此,还在继续,对于复杂SQL语句又是如何加锁的呢?MySQL中的索引的分析又是怎样的呢?性能分析、性能优化这些又是怎么呢?还需要进一步的学习探索

    2.1K20

    Java面试考点7之MySQL调优

    ; 支持了通用表表达式,使复杂查询中的嵌入表语句更加清晰; 新增了窗口函数的概念,可以用来实现新的查询方式。...唯一索引,就是索引列中的值必须是唯一的,但是允许出现空值。...主键索引是一种特殊的唯一索引,但是它不允许出现空值。 普通索引,与唯一索引不同,它允许索引列中存在相同的值。例如学生的成绩表,各个学科的分数是允许重复的,就可以使用普通索引。...要擅用索引,比如为经常作为查询条件的字段创建索引、创建联合索引时要根据最左原则考虑索引的复用能力,不要重复创建索引;要为保证数据不能重复的字段创建唯一索引等等。...例如 MySQL8.0 中提供了窗口函数来支持新的查询方式;支持通用表表达式,使复杂查询中的嵌入表语句更加清晰等等。

    61110

    数据库索引

    primary key, k int not null, name varchar(16), index(k) )engine=InnoDB; 表中R1~R5的(ID,k...也就是说,基于非主键索引的查询需要多扫描一棵索引树,因此,在应用中应该尽量使用主键查询 3.自增主键 B+树为了维护索引有序性,在插入新值的时候需要做必要的维护。...k=5,取得ID=500 再回到ID索引树查到ID=500对应的R4(第二次回表) 在k索引树取下一个值k=6,不满足条件,循环结束。...k=5条件的记录,因为普通索引的索引列值是不要求唯一的,所以还要再多判断一次 对于唯一索引,因为它的索引列的值必须唯一,所以找到(5, 500)后会直接停止检索 这个不同带来的性能差距会有多少呢?...微乎其微 更新过程 为了说明普通索引和唯一索引对更新语句性能的影响这个问题,需要先了解change buffer 当需要更新一个数据页时,如果数据页在内存中就直接更新,如果没有在内存中,在不影响数据一致性的前提下

    45020

    史上最全存储引擎、索引使用及SQL优化的实践

    创建新表时如果不指定存储引擎,那么系统就会使用默认的存储引擎,MySQL5.5之前的默认存储引擎是MyISAM,5.5之后就改为了InnoDB。...8)info列,显示这个sql语句,是判断问题语句的一个重要依据 3.3 explain分析执行计划 通过以上步骤查询到效率低的SQL语句后,可以通过EXPLAIN或者DESC命令获取MySQL如何执行...SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序。...7)用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。...5.5 优化嵌套查询 MySQL4.1版本之后,开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。

    1.4K30

    mysql面试题总结

    建议创建索引列 1)在经常需要搜索的列上,可以加快搜索的速度; 2)在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; 3)在经常用在连接的列上...不建议创建索引列 1) 对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。...数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。...主键索引 数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。 在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。...如果出现重复 属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之 第一范式就是无重复的列。

    1.2K10

    SQL 语法速成手册

    模式(schema) - 关于数据库和表的布局及特性的信息。模式定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。数据库和表都有模式。...列(column) - 表中的一个字段。所有表都是由一个或多个列组成的。 行(row) - 表中的一个记录。 主键(primary key) - 一列(或一组列),其值能够唯一标识表中每一行。...查询 - 基于特定条件检索数据。这是 SQL 的一个重要组成部分。 语句 - 可以持久地影响纲要和数据,也可以控制数据库事务、程序流程、连接、会话或诊断。...确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。...在 INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据; 在 UPDATE 型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据

    17.2K40

    SQL 语法速成手册

    模式(schema) - 关于数据库和表的布局及特性的信息。模式定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。数据库和表都有模式。...列(column) - 表中的一个字段。所有表都是由一个或多个列组成的。 行(row) - 表中的一个记录。 主键(primary key) - 一列(或一组列),其值能够唯一标识表中每一行。...查询 - 基于特定条件检索数据。这是 SQL 的一个重要组成部分。 语句 - 可以持久地影响纲要和数据,也可以控制数据库事务、程序流程、连接、会话或诊断。...确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。...在 INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据; 在 UPDATE 型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据

    16.9K20
    领券