《MySQL实战45讲》——学习笔记04-05 “深入浅出索引、最左前缀原则、索引下推优化“

04 | 深入浅出索引(上) 1. 什么是索引? 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样,书有500页,每页存的都是书的内容,目录可能只有5页,只存了页码;通过目录能快速找到某个主题的页码,从而快速找到内容; 2. 索引的常见模型 索引的出现是为了提高查询效率,但是实现索引的方式却有很多种,称之为索引模型;这里介绍三种常见也比较简单的数据结构:哈希表、有序数组、搜索树; 哈希表是一种以键-值(key-value)存储数据的结构,输入待查找的键即key,就可以找到其对应的值即Value;...

mysql-索引

发布时间:2022-10-23 索引 MYSQL
计算机内存存取、磁盘存取原理 https://blog.csdn.net/qq_35642036/article/details/82809932 一、基础概念 1.什么是索引? 以下mysql官方的解释: 索引是一个将索引列按照一定顺序排序,并维护到一种存储结构中如B+树或者hash列表中。在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。 在数据十分庞大的时候,索引可以大大加快查询的速度,这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址,然后...

【图灵MySQL】深入理解MySQL索引底层数据结构与算法

【图灵MySQL】深入理解Mysql索引底层数据结构与算法 索引数据结构二叉树、红黑树、Hash、B+树详解 1. 什么是索引? 2. 二叉树 3. 红黑树 4. Hash、B+树 B树 B+树 B+树在MySQL中默认页节点的大小是多少?千万级别的数据最多需要几次IO? Hash MyISAM与Innodb存储引擎底层索引实现区别 MyISAM 与 InnoDB 区别(重点) MyISAM InnoDB MySQL的索引分类 1. 按照功能划分 (1)普通索引 (2)唯一性索引 (3)主键索引 (4)全...

数据库索引 ( 四 ) 原理及概念

发布时间:2022-10-25 SQL与数据库 B+TREE 索引 数据库
3.索引原理 MySQL官方对索引定义:存储引擎用于快速查找记录的一种数据结构,需要额外开辟空间和数据维护工作。 索引是物理数据页存储,在数据文件中,利用数据页(page)存储索引可以加快索引速度,但是同时也会降低增删改操作速度,索引维护需要代价。 3.1.二分查找法 二分查找法也叫做折半查找法,它是在有序数组中查找指定数据的搜索算法。他的优点是等值查询、范围查询性能好,缺点是更新数据、新增数据、删除数据维护成本高。 查找步骤: 首先定位left和right两个指针计算(left+right)/2,除不尽...

【校招VIP】数据库基础之索引相关

发布时间:2022-10-18 索引 JAVA专题 数据库 JAVA 面试
考点介绍: 索引相关内容是数据库基础考察时的常考内容。B、B+、Hash、倒排、mysql、聚簇索引都是校招面试的高频考点。 本期分享的数据库基础之索引相关,分为试题、文章以及视频三部分。 答案详情解析和文章内容可点击下方链接即可查看! 一、考点题目 1.谈一谈 MySQL 的 B-Tree 索引 解答:大多数 MySQL 引擎都支持这种索引,但底层的存储引擎可能使用不同的存储结构,例如 NDB 使用 T-Tree,而 InnoDB 使用 B+ Tree。B-Tree 通常意味着所有的值都是按顺序存储的,...

MySQL之COUNT性能到底如何

发布时间:2022-10-17 索引 数据库 大数据 MYSQL JAVA
* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 前言1.COUNT(1)、COUNT(*)与COUNT(字段)哪个更快? 实验分析实验结果实验结论2.COUNT(*)与TABLES_ROWS3.COUNT(*)是怎么样执行的?4.总结 前言 在实际开发过程中,统计一个表的数据量是经常遇到的需求,用来统计数据库表的行数都会使用COUNT(*),COUNT(1)或者COUNT(字段),但是表中的记录越来越多,使用COUNT(*)也会变得越来越慢,本文我们就来分析一下CO...

Mysql相关知识点汇总

发布时间:2022-10-21 索引 NEXT-KEY LOCK 数据库 MYSQL MVCC
MySql 相关知识点 提示:本文是学习 丁奇老师《Mysql实战 45 讲》的个人总结 前言 将 MySql 学习的相关内容形成若干篇文章,以加深印象 一、日志相关 1.查询的流程 连接器、分析器、优化器、执行器 2. WAL 技术 Write-Ahead-Logging 先写日志,后写磁盘。(日志是顺序写,速度快,磁盘是随机写,速度慢) 当需要更新一条记录时,InnoDB 引擎会把记录写到 redo log 里,再更新内存。这时更新操作就结束了。 通常在后台不忙的时候,InnoDB 引擎会把...

MYSQL 那点破事!索引、SQL调优、事务、B+树、分表 ....

发布时间:2022-10-18 索引 数据库 MYSQL REDIS JAVA
为了便于大家查找问题,了解全貌,整理个目录,我们可以快速全局了解关于mysql数据库,面试官一般喜欢问哪些问题 接下来,我们逐条来看看每个问题及答案 MyISAM 和 InnoDB 的区别? 答案:InnoDB 支持 事务、外键、聚集索引,通过MVCC来支持高并发,索引和数据存储在一起。InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数。 InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度...

MySQL 上亿大表如何优化?

发布时间:2022-10-19 索引 数据库 MYSQL SQL JAVA
背景 XX 实例(一主一从)xxx 告警中每天凌晨在报 SLA 报警,该报警的意思是存在一定的主从延迟。(若在此时发生主从切换,需要长时间才可以完成切换,要追延迟来保证主从数据的一致性) XX 实例的慢查询数量最多(执行时间超过 1s 的 SQL 会被记录),XX 应用那方每天晚上在做删除一个月前数据的任务。 分析 使用 pt-query-digest 工具分析最近一周的 mysql-slow.log: pt-query-digest --since=148h mysql-slow.log | less...

MySQL表太大,count(*)都能 502,怎么优化?

发布时间:2022-10-19 索引 数据库 MYSQL 编程语言 JAVA
MySQL的 count(*) 虽说做过优化,不过表太大的时候执行起来也很慢,有的时候API里单纯统计一下数据,就能出个502页面给你!这种场景下应该怎么优化,有什么方法能替代count(*)吗?今天分享一篇MySQL 优化实战。 文章转自「小白debug」觉得不错,推荐关注。 先给大家举个例子: 比如说,你有一张短信表(sms),里面放了各种需要发送的短信信息。 sms建表sql sms表 需要注意的是state字段,为0的时候说明这时候短信还未发送。 此时还会有一个异步线程不断...

【图灵MySQL】MySQL索引优化实战(上)

【图灵MySQL】MySQL索引优化实战(上) 数据准备-SQL 一些复杂的索引优化例子  1、联合索引第一个字段用范围不会走索引 2、强制走索引 3、覆盖索引优化 4、in和or在表数据量比较大的情况会走索引,在表记录不多的情况下会选择全表扫描 5、like KK% 一般情况都会走索引(索引下推) 索引下推 什么是索引下推? 为什么范围查找(大于号)MySQL没有用索引下推优化? MySQL如何选择合适的索引  trace工具用法 第一阶段:SQL准备阶段,格式化sql 第二阶段:SQL优化阶段  第三...

【MySQL】索引和事务

前言 你所做的事情,也许暂时看不到成果,但不要灰心或焦虑,你不是没有成长,而是在扎根 【索引和事务】主要和面试题有关! 一、索引 一)概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 二)作用 索引的存在主要是为了提高查询的效率但是索引也是需要付出代价的: ①消耗更多的空间 ②虽然提高了查询效率,但是降低了增加、删除、修改的效率——增删改,不仅要修改数据,还要调整索引! (虽然索引有代价,但是是值...

MySQL 啥时候用记录锁,啥时候用间隙锁?

发布时间:2022-10-24 索引 数据库 MYSQL PYTHON JAVA
大家好,我是树哥。 在前面的文章「MySQL 不同隔离级别,都使用了什么锁?」里,我们得出结论:在「读未提交」和「读已提交」隔离级别下,都只会使用记录锁,不会用间隙锁和 Next-Key 锁。而对于「可重复读」隔离级别来说,会使用记录锁、间隙锁和 Next-Key 锁。 那么 MySQL 啥时候会用记录锁,啥时候会用间隙锁,啥时候又会用 Next-Key 锁呢?今天我们就来做一些测试,弄清楚这个问题。 文章思维导图 影响因素 在开始之前,我们需要声明的是:本文所有测试及结论的前提均是在「可重复...

有本MySQL的书,封面站了一只大鸟,你看过吗?

发布时间:2022-10-24 索引 数据库 MYSQL 分布式 JAVA
之前发了一些文章: 《频繁插入,用什么存储引擎更合适?》 《MySQL性能调优,必须掌握这一个工具》 《数据库允许空值(null),往往是悲剧的开始》 《插入时,究竟发生了什么?》 有水友问我: 除了MySQL官网,有没有纸质的书籍推荐? 额… 还真有。 我在学习MySQL的时候,看的是《高性能MySQL》,红色封皮,上面站了一只大鸟,非常厚的一本,不知道多少人看过?如果大家要看纸质书,我现在依旧推荐这一本。 问了下博文视点的朋友,他们说最近新出到第四版了,如果你正好在学习MySQL,推荐一下这本书。 ...

SQL优化 21 连击 + 思维导图

发布时间:2022-10-24 索引 数据库 MYSQL JAVA 面试
一、查询SQL尽量不要使用select *,而是具体字段 1、反例 SELECT * FROM user 2、正例 SELECT id,username,tel FROM user 3、理由 节省资源、减少网络开销。可能用到覆盖索引,减少回表,提高查询效率。 注意:为节省时间,下面的样例字段都用*代替了。 二、避免在where子句中使用 or 来连接条件 1、反例 SELECT * FROM user WHERE id=1 OR salary=5000 2、正例 (1)使用union all SELEC...

数据库索引 ( 二 ) MySQL索引基本操作

发布时间:2022-10-26 SQL与数据库 MYSQL 索引 数据库
2.数据库索引 2.1.索引概念 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构. 索引的实现通常使用BTree和变种的B+Tree(MySQL常用的索引就是B+Tree)。除了数据之外,数据库系统还维护为满足特定查找算法的数据结构,这些数据结构以某种方式引用数据,这种数据结构就是索引。 索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。 所以索引是 快速查询,更新数据库中表数据 的工具. 2.1.1.索引作用 通过创建索引,可以在查询的过程中,...

【图灵MySQL】MySQL索引优化实战(下)

【图灵MySQL】MySQL索引优化实战(下) 分页查询优化详解 SQL数据准备 分页场景描述 官网关于分页查询优化的方案 1. 根据自增且连续的主键排序的分页查询 2. 根据非主键字段排序的分页查询(常见 | 推荐) 关于limit的优化思路(perfect!) 表Join关联原理详解及其优化 SQL数据准备 MySQL的表关联常见有两种算法 1. 嵌套循环连接 Nested-Loop Join(NLJ) 算法 驱动表结论  2. 基于块的嵌套循环连接 Block Nested-Loop Join(BN...

Mysql索引、锁、事务、mvcc、分库分表总结

发布时间:2022-10-23 索引 MYSQL 分库分表 MVCC
1.mysql执行计划    可以使用explain+sql语句来模拟优化器执行sql查询语句,从而知道mysql是如何处理sql语句的。    官网地址:MySQL :: MySQL 8.0 Reference Manual :: 8.8.2 EXPLAIN Output Format (1)执行计划中包含的信息  EXPLAIN Output Columns ColumnJSON NameMeaningidselect_idThe SELECT identifierselect_typeNoneTh...

MySQL高级:explain分析SQL,索引失效&常见优化场景

发布时间:2022-10-28 索引 JAVA SQL 数据库
本篇,我们先着重讲解如何分析,具体如何找到SQL,后续的实战篇,我们再来详细谈一谈。 🎐【一、explain】分析SQL ​ explain中,包含了如下几个字段(不同版本可能会有所差异): 字段 含义 id select查询的序列号,是一组数字,表示的是查询中执行select子句或者是操作表的顺序。 select_type 表示 SELECT 的类型,常见的取值有 SIMPLE(简单表,即不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION 中的第二...

MySQL索引原理之索引与约束

发布时间:2022-10-30 索引 # MYSQL 数据库 MYSQL ELASTICSEARCH SQL
索引 索引的概念:索引是一种有序的存储结构。索引按照单个或多个列的值进行排序。 索引的目的:提升搜索效率。 索引分类 按照数据结构分为: (1)B+树索引。 (2)自适应hash索引。主要用在内存当中,看MySQL缓冲中是否有数据。 (3)全文索引。将存储在数据库当中的整本书和整篇文章中的任意内容信息查找出来的技术;关键词 FULLTEXT;在短字符串中用 LIKE %;在全文索引中用 match 和against。一般不会用到;如果要用全文索引,会使用elasticsearch工具。 按照物理存储分...

全网都在说一个错误的结论

发布时间:2022-10-30 索引 数据库 大数据 MYSQL JAVA
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇 作者丨小林coding 来源丨小林coding(ID:CodingLin) 大家好,我是小林。 大家在背 MySQL 八股文的时候,是不是经常看到这句话。 联合索引的最左匹配原则会一直向右匹配直到遇到范围查询(>、<、between、like) 就会停止匹配。 我随手在网上搜了下, 基本全部都是这个结论,似乎这个结论大家都耳濡目染了,应该大多数人都觉得这个结论是正确的吧。 我在昨晚折腾了几个实验,发现这个结论并不全对!去掉 「bet...

《MySQL实战45讲》——学习笔记11 “字符串加索引、前缀索引“

发布时间:2022-11-07 索引 MYSQL 前缀索引 # 《MYSQL45讲》GEEK
关于MYSQL索引,前面有一篇文章《MySQL实战45讲》——学习笔记04-05 “深入浅出索引、最左前缀原则、索引下推优化“,本篇文章属于索引知识的补充点并且偏实际应用,主要讨论如何对字符串的表字段加索引; 假设,一个支持邮箱登录的系统的用户表是这么定义的: mysql> create table SUser(ID bigint unsigned primary key,email varchar(64), ... )engine=innodb; 由于要使用邮箱登录,所以业务代码中一定会出现类...

10个Pandas的小技巧

发布时间:2022-11-02 索引 数据分析 大数据 PYTHON ELASTICSEARCH
来源:机器之心本文约2700字,建议阅读5分钟pandas是数据科学家必备的数据处理库,我们今天总结了10个在实际应用中肯定会用到的技巧。 1、Select from table where f1=’a’ and f2=’b’ 使用AND或OR选择子集: dfb = df.loc[(df.Week == week) & (df.Day == day)]OR的话是这样 dfb = df.loc[(df.Week == week)|(df.Day == day)] 2、Select where...

MySQL数据库优化

发布时间:2022-11-03 索引 MYSQL SQL 数据库
MySQL优化方向 MySQL数据库优化一般有这几个方面 减少数据访问:设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO返回更少的数据:只返回所需字段和数据分页处理,减少磁盘IO和网络IO减少交互次数:批量DML操作,函数存储等减少数据连接次数减少服务器CPU开销:尽量减少数据库排序操作已经全表查询,减少CPU内存占用利用更多资源:使用表分区,可以增加并行操作,更大限度利用CPU资源 SHOW STATUS 通过 show status查询SQL执行频率,了解当前数据库是以插入更新为主还是查询操作...

mysql不锁表加索引

发布时间:2022-11-03 索引 MYSQL 数据库
场景 mysql的某些表由于前期设计不周,导致数据量变大后查询/更新速度变慢。 想要加索引,线上又不能停。直接执行alter table add index会锁死整张表。 一种方式:新表替换 创建与原来表结构相同的新表,加索引。把老表数据复制到新表。删除老表,重命名新表 这种比直接加索引速度要快,但仍需要停止服务。 不加锁添加索引 对于mysql 5.6以上版本数据库,提供了无锁加索引方式。 ALTER TABLE tbl_name ADD KEY (column), ALGORITHM=INPLACE,...

OSG 基于索引绘制图元

发布时间:2022-11-03 OSG 图元 索引
一、简介 在之前的博客OSG 绘制几何图元中,我们使用DrawArrays来直接通过数组读取顶点数据来绘制图元,整个过程很流畅顺利。但是,如果一个图元有很多共享顶点,那么采用这种方式它的效率就会略低。例如,为了让osg::DrawArrays在gl_triangle模式下绘制一个有8个顶点的立方体,顶点数组就会重复绘制每个顶点几次,最后将数组的大小增加到36(12个三角形面)。因此为了降低内存,并提供渲染效率,我们可以通过指定顶点索引的方式来实现绘制图元。 二、相关类别 为了解决上述问题...

SQL 优化 20 连问

发布时间:2022-11-03 索引 数据库 MYSQL ORACLE JAVA
一、查询SQL尽量不要使用select *,而是具体字段 1、反例 SELECT * FROM user 2、正例 SELECT id,username,tel FROM user 3、理由 节省资源、减少网络开销。可能用到覆盖索引,减少回表,提高查询效率。 注意:为节省时间,下面的样例字段都用*代替了。 二、避免在where子句中使用 or 来连接条件 1、反例 SELECT * FROM user WHERE id=1 OR salary=5000 2、正例 (1)使用union all SE...

SQL 优化 20 连问

发布时间:2022-11-03 索引 数据库 MYSQL ORACLE JAVA
一、查询SQL尽量不要使用select *,而是具体字段 1、反例 SELECT * FROM user 2、正例 SELECT id,username,tel FROM user 3、理由 节省资源、减少网络开销。可能用到覆盖索引,减少回表,提高查询效率。 注意:为节省时间,下面的样例字段都用*代替了。 二、避免在where子句中使用 or 来连接条件 1、反例 SELECT * FROM user WHERE id=1 OR salary=5000 2、正例 (1)使用union all SE...

面试题:mysql 一棵 B+ 树能存多少条数据?

发布时间:2022-10-20 索引 数据结构 数据库 MYSQL JAVA
今日寄语:充满活力的新人,能让身边的人都重回初心,真是不可思议。 mysql 的InnoDB存储引擎 一棵B+树可以存放多少行数据? (答案在文章中!!) 要搞清楚这个问题,首先要从InnoDB索引数据结构、数据组织方式说起。 我们都知道计算机有五大组成部分:控制器,运算器,存储器,输入设备,输出设备。 其中很重要的,也跟今天这个题目有关系的是存储器。 我们知道万事万物都有自己的单元体系,若干个小单体组成一个个大的个体。就像拼乐高一样,可以自由组合。所以说,如果能熟悉最小单元,就意味着我们抓住了...

玩转MySQL:如何正确应用索引

发布时间:2022-11-05 索引 MYSQL 开发语言 程序人生 JAVA
引言 数据库索引,绝对是MySQL的核心功能之一,如果没有索引机制的数据库,那数据的检索效率绝对是令人无法接受的,毕竟没有索引的表数据,就如同一个普通的文本文件存储在磁盘中。在《索引上篇》中,我们对于MySQL提供的索引机制,从引入,到创建、使用、分类、管理....等进行了全面阐述,相信经过上一篇的讲解后,大家对MySQL索引机制建立了系统化的认知,而本篇则会以上篇为基础,对索引机制进一步加深掌握。 不过在上篇中虽对数据库索引机制有了完善认知,但还不够,因为上篇仅是单纯的认知阶段,能否真正的在实际项目中运...

mysql limit过大 遍历的一些问题

发布时间:2022-11-07 索引 MYSQL
最近有个需求,让把db里面某张符合条件的数据都load出来,数据量略大,当然不能一次都拉出来,那自然就想到了limit,sql如下 select * from my_tableWHERE point_type=1003order by id limit 0,200 point_type 就是一个不带索引的普通字段 先是limit 0,1000 然后就是上一批数据的最大id,再次limit 但是很快就发生了问题,当offset很大的时候,sql基本就卡死了。 select * from my_tabl...

OceanBase学习笔记之分区与索引

OceanBase学习笔记之分区 一:RANGE分区 RANGE 分区根据分区表定义时为每个分区建立的分区键值范围,将数据映射到相应的分区中。它是常见的分区类型,经常跟日期类型一起使用。例如,可以将业务日志表按日/周/月分区。 (1)简单语法 CREATE TABLE table_name ( column_name1 column_type [, column_nameN column_type]) PARTITION BY RANGE ( expr(column...

Oracle常用对象精解(1)

数据库的功能,就是组织、存储和管理各种数据库对象。同时,我们创建数据库,就是为了在其中创建和存储我们需要和使用的各种数据库对象 ,这些数据库对象功能各异,各司其职,分别满足我们在数据库方面的各种需求。例如:表用来组织和存储数据,索引用来改善和提升表中数据的检索性能,视图可以为我们使用和管理数据提供便利,存储过程可以按照用户需求完成某些功能和任务等。 1. 表(Table) 1.1. 表概念 提到数据库,我们对表这个概念并不陌生,我们知道,通常操作数据时是针对表的。可实际上,表只是一个逻辑概念,是数据库组织...

20条优化 SQL 的宝贵建议,建议收藏!

发布时间:2022-11-07 索引 数据库 MYSQL ORACLE JAVA
一、查询SQL尽量不要使用select *,而是具体字段 1、反例 SELECT * FROM user 2、正例 SELECT id,username,tel FROM user 3、理由 节省资源、减少网络开销。可能用到覆盖索引,减少回表,提高查询效率。 注意:为节省时间,下面的样例字段都用*代替了。 二、避免在where子句中使用 or 来连接条件 1、反例 SELECT * FROM user WHERE id=1 OR salary=5000 2、正例 (1)使用union all SELEC...

关系数据库设计及优化原则

发布时间:2022-11-08 索引 数据库 MYSQL 字符串 JAVA
    一直以来就想总结一下自己这么多年来在关系数据库上积累的经验。奈何自己是一个比较懒的人一直不想动手去写。扎克伯格曾说过:“想做一件事的话,最好的办法就是先开始”。索性就先写一点东西,这些东西不会太长,自然也不会包括太多细节(如果有纸上谈兵的情况,也敬请谅解)。     本文的主要内容是对关系数据库的设计及优化总结出一些基本原则,这些原则可以帮助提高数据库的设计质量的同时避免一些常见的性能问题。(软件行业没有银弹,任何原则是指一种参考,困难的是懂得何时打破这些原则) 原则一 OLTP负载尽量遵循第三...

数据库的索引简述

发布时间:2022-11-05 索引 MYSQL 数据库
一、概述 数据库索引结构采用的是B+树,总的来说B+树具有的好处就是树的高度相对低查找高效、磁盘IO次数少、可以范围查找。 二、B+树的相对优点 二叉树:极端情况下可能形成链表平衡二叉树:为了保持平衡需要进行旋转等操作,插入效率低。B树:索引和数据没有分离,每次读取需要更多的磁盘操作。hash表:无法范围查找。 三、聚集索引和非聚集索引 聚集索引:索引和数据在一块存储,物理上连续,表中只能由一个聚集索引,查询效率高;非聚集索引:数据单独存储,逻辑上连续,可以有多个非聚集索引,可以避免二次查询; 四、Inn...

Oracle SQL执行计划操作(2)——索引相关操作

2. 索引相关操作 该类操作与SQL语句执行计划中通过索引访问表中数据的路径和方式相关,主要包括索引访问类相关操作。根据不同的具体SQL语句及其他相关因素,以下各操作可能会出现于相关SQL语句的执行计划。 1)INDEX UNIQUE SCAN 进行一个索引唯一扫描。顾名思义,唯一索引中的每个键值都是独一无二的,主键约束也对应一个唯一索引。该操作具体如图2-1中节点2所示。 图2-1 索引访问操作INDEX UNIQUE SCAN示例  2)INDEX RANGE SCAN 进行一个索引范围扫描。当SQ...

索引失效情况

发布时间:2022-11-13 索引 MYSQL
复合索引不要跨列或无序使用(最佳左前缀原则);复合索引不能使用 不等于(!= <>)、IS NUL(IS NOT NULL) 或 大于号(>) 否则会造成自身以及右侧索引全部失效;不要在索引上进行任何操作(函数、计算以及类型转换),否则索引失效;LIKE尽可能以常量开头,不要以匹配符号(eg: %、_)开头,否则索引失效;尽量不要使用or,否则索引左侧失效;...

【MySQL】高性能高可用设计实战-索引篇(MySQL专栏启动)

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C++及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。   📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。   🏆 InfoQ签约作者、CSDN专家博主/后端领域优质创作者/内容合伙人、阿里云专家/签约博主、51CTO专家 🏆   🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~  ...

一句口诀教你辨别索引失效七大场景

摘要:本文将通过一句口诀,教你如何辨别索引失效。 本文分享自华为云社区《虚竹哥教你一句口诀辨别索引失效七大场景》,作者:小虚竹 。 一、口诀 教你一句功法口诀:模 型 数 或 运 最 快 二、初始化数据 创建存储引擎为InnoDB的学生表 drop table if exists student;CREATE TABLE `student` (`id` int NOT NULL AUTO_INCREMENT COMMENT '自增ID',`order_num` bigint NOT NULL COMME...

【MySQL】MySQL数据库锁使用与InnoDB加锁的原理解析(MySQL专栏启动)

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C++及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。     📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。      🏆 InfoQ签约作者、CSDN专家博主/后端领域优质创作者/内容合伙人、阿里云专家/签约博主、51CTO专家 🏆      🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍...

MySQL 聚集索引(InnoDB)和 非聚集索引(MyISAM) 精讲~两张图彻底搞懂

发布时间:2022-11-04 索引 INNODB 技术专栏 数据库 MYSQL MYISAM
非聚集索引(MyISAM) 索引和数据单独存放表有三个文件叶子结点存放行数据地址信息通过查找到主键key,然后还得根据指针地址去数据表中找对应的数据行 聚集索引(InnoDB) 索引和数据存放在一起创建表之后会产生两个文件叶子结点存放行数据 留几个关于InnoDB 常见的几个面试题 答案见B站视频 为什么DBA要求我们必须要给Innodb表建主键? 为什么DBA推荐我们使用整型做主键? 为什么Innodb非主键索引叶子节点存储的是主键值,而不是数据本身?...

MySQL 为什么要使用索引及索引创建的原则有哪些?

发布时间:2022-10-31 索引 技术专栏 数据库 MYSQL SQL
什么是索引 索引也是一种排好序的数据结构,它记录了原数据的单个列或多个列,通过索引查询,程序不需要查所有记录,只需要先按照索引查到具体的数据,然后在根据索引记录的指针位置,找到对应的原始数据记录。 举个例子来说,索引就好比是我们书本的目录,我们通过目录能够快速定位到我们想看指定章节的页数,如果我们不适用索引,会是什么情况呢?我们最大可能就是从头往后方,一页一页确认去找。 为什么创建索引 因为索引在一定程度上,提高了数据库查询速度 在MySQL中有两种数据访问方式:顺序访问和索引访问。 顺序访问 顺序访问又...

SqlServer关于索引创建和删除

发布时间:2022-11-03 索引 SQLSERVER ASP.NET 数据库
暂做个记录,后面有空再补充。 –普通索引: create index[index_name] on table(column_name) –唯一索引:create index[index_name] on table(column_name) –聚集索引:create clustered index[index_name] on table(column_name) –非聚集索引:create nonclustered index[index_name] on table(column_name) –复合...

MySQL 是怎么加行级锁的?为什么一会是 next-key 锁,一会是间隙锁,一会又是记录锁?

发布时间:2022-11-14 索引 行级锁 MYSQL SQL JAVA 图解MYSQL
大家好,我是小林。 是不是很多人都对 MySQL 加行级锁的规则搞的迷迷糊糊,一会是 next-key 锁,一会是间隙锁,一会又是记录锁。 坦白说,确实还挺复杂的,但是好在我找点了点规律,也知道如何如何用命令分析加了什么类型的行级锁。 之前我写过一篇关于「MySQL 是怎么加行级锁的?」的文章,随着我写 MySQL 锁相关的文章越来越多时,后来发现当时的文章写的不够详细。 为了让大家很清楚的知道 MySQL 是怎么加行级锁的,以及如何用命令分析加了什么行级锁,所以我重写了这篇文章。 文章内容比...

数据库索引

发布时间:2022-11-12 索引 DATABASE 数据库
一:什么是索引? 所谓索引,就相当于目录。比如我们的新华字典,如果要找哪个字,一定会先找目录,通过目录再找到具体的目标。众所周知,数据库也是按页进行存储的。那么数据库一样可以通过类似新华字典一样设计,维护一个目录,而该目录,就是我们的数据库索引 二:索引的分类(从数据结构角度) 1.hash索引 hash索引的单条记录的查询效率是非常高的,通过hashmap可知,hash索引的时间复杂度是O(1),数据库引擎会为每一行记录计算几个hash值,然后数据库引擎会维护该hash码,但是因为值相近的两个数据,...

MySQL 6种索引数据结构详解:BTree、B+Tree、红黑树、平衡二叉树、二叉树、Hash

二叉树 对半搜索,每个节点最多两个孩子左侧孩子小于根节点,右侧孩子大于等于根节点二叉排序树的查找性能在0(Log2n)到O(n)之间 正常情况下长这样 极端情况下长这样 如果长这样的,查找时间复杂度就是O(n)了,那么就得靠平衡二叉树优化了,现在有请平衡二叉树登场… 平衡二叉树 满足二叉树任何节点的两个子树的高度最大差为1如果对平衡二叉树进行删除和新增,那么会破坏平衡,就会出发旋转,最终达到平衡,也成自平衡二叉树 虽然能做到平衡了,避免了O(n),但是每次都进行频繁的左旋或右旋,咱也扛不住啊,所以来...

09_MySQL数据库_索引的原理

发布时间:2022-11-05 索引 MYSQL 服务器 数据库
此专栏所有章节快速导航 01_MySQL数据库_CentOS7安装MySQL 02_MySQL数据库_数据库基础知识 03_MySQL数据库_库的操作 04_MySQL数据库_表的操作 05_MySQL数据库_数据类型 06_MySQL数据库_表的约束 07_MySQL数据库_增删查改 08_MySQL数据库_复合查询 09_MySQL数据库_索引 10_MySQL数据库_事务管理 11_MySQL数据库_用户管理 12_MySQL数据库_CentOS7下C-C++链接MySQL 一. 索引的简述 ...