1. 索引是什么?
1.1. 索引是什么
一张表有 500 万条数据,在没有索引的 name 字段上执行一条 where 查询:
select
*
from
user_innodb
where
name =
'
青山
'
;
如果 name 字段上面
转载
2023-12-26 21:46:11
153阅读
B+树结构我们说对于InnoDB存储引擎来说,表中的数据都存储在所谓的B+树中,我们每多建立一个索引,就相当于多建立一棵B+树。对于聚簇索引对应的B+树来说,叶子节点处存储了完整的用户记录(所谓完整用户记录,就是指一条聚簇索引记录中包含所有用户定义的列已经一些内建的列),并且这些聚簇索引记录按照主键值从小到大排序。对于二级索引对应的B+树来说,叶子节点处存储了不完整的用户记录(所谓不完整用户记录,
转载
2024-10-08 22:26:34
48阅读
进程: 一个正在执行的程序.每个进程执行都有一个执行顺序,该顺序是一个执行路径,或叫一个控制单元. 一个进程至少有一个线程.线程:就是进程中的一个独立的控制单元. 线程控制这进程的执行.多进程的缺点:进程切换开销大;进程间的通信很不方便。多线程: 指的是在单个程序中可以同时运行多个不同的线程,执行不同的任务,线程切换的开销小 。线程的生命周期Java 做了很多工作,力求把这些细节抽象化。Java
你说的 用了 Spring Cloud 请求反而更慢,这个其实很常见,原因可能出现在以下几个方面:? 常见原因额外的网络调用链路Spring Cloud 一般会引入 网关(Gateway)、服务注册中心(Eureka/Nacos)、负载均衡(Ribbon/LoadBalancer)、Feign/OpenFeign 等组件。这些组件会带来额外的 一次或多次转发,自然比直连单体服务慢。序列化 &
# 频繁缓存用了Redis反而更慢?一探究竟
在现代的软件开发中,缓存技术被广泛使用以提高系统性能和响应速度。Redis作为一个高性能的键值存储系统,因其高速读写能力而受到许多开发者的青睐。然而,有时候我们会发现,使用Redis进行频繁缓存反而会导致系统性能下降。这究竟是什么原因呢?本文将通过代码示例和流程图,带您一探究竟。
## 为什么使用Redis缓存会慢?
### 1. 缓存穿透
缓
原创
2024-07-15 21:03:09
57阅读
【问题】我们有台HP的服务器,SSD在写IOPS约5000时,%util达到80%以上,那么这块SSD的性能究竟有没有问题,为解决这个问题做了下面测试。【工具】blktrace是linux下用来排查IO性能的工具。它可以记录IO经历的各个步骤,并计算出IO请求在各个阶段的消耗,下面是关键的一些步骤:Q2G – 生成IO请求所消耗的时间,包括remap和split的时间;G2I – IO请求进入IO
转载
2024-07-09 16:26:45
162阅读
1、如果MySQL估计使用索引比全表扫描更慢,则不适用索引,
ex:列key_part1均匀的分布在1-100之间。下面的sql则不会使用索引
key_part1 > 1 and
key_part1 <90 2、如果使用memory/heap表,并且where语句中不适用“=”进行索引,则
转载
2023-08-08 18:42:48
79阅读
今天我们来实际操作一下 首先我们创建一个用户表进行测试Like 在email字段上加一个索引来测试Like关键字 我们先来复习一下Like语句的几种写法 往大的方向说Like语句由两种写法,分别时%和_。 %:用来匹配若干个字符的出现形式(也可以是0个) _:用来匹配单个字符的出现形式 工作中我们主要的模糊查询也是%,我们重点来看一个Like的几种写法select * from t_user wh
转载
2023-08-08 08:04:35
85阅读
先提前剧透:有4个知识点是极其重要的 1、创建索引的过程就是建B+树的过程,B+树中节点的值就是创建的索引 2、复合索引的B+树,叶子节点存储的是复合的索引字段与主键字段,主键字段是用于回表的 3、如果回表的次数过多,是不走索引的 4、如果没有where条件,select 索引字段的话,是走索引的,因为索引字段少的话,一页就能存储非常多行记录,这样页的数目就变少了,IO次数也就变少了,所以应该走索
转载
2023-08-01 13:04:05
192阅读
不知道从什么时候开始,网上流传着这么一个说法:MySQL的WHERE子句中包含 IS NULL、IS NOT NULL、!= 这些条件时便不能使用索引查询,只能使用全表扫描。这种说法愈演愈烈,甚至被很多同学奉为真理。咱啥话也不说,举个例子。假如我们有个表s1,结构如下:CREATE TABLE s1 (
id INT NOT NULL AUTO_INCREMENT,
key1 VA
转载
2023-08-04 12:28:41
343阅读
不知道从什么时候开始,网上流传着这么一个说法:MySQL的WHERE子句中包含 IS NULL、IS NOT NULL、!= 这些条件时便不能使用索引查询,只能使用全表扫描。CREATE TABLE s1 (
id INT NOT NULL AUTO_INCREMENT,
key1 VARCHAR(100),
key2 VARCHAR(100),
key3 VARC
转载
2023-08-04 13:59:49
291阅读
explain介绍mysql中explain关键字可以模拟MySQL优化器执行SQL语句,是一个可以很好的分析SQL语句或表结构的性能瓶颈。explain的使用方法:explain + sql语句,下面我们先来执行下explain语句EXPLAIN SELECT * FROM `user` WHERE created_time > "2020-03-08";执行结果如下: 可以看到
转载
2023-07-13 09:54:42
144阅读
# 如何实现 MySQL 的 GROUP BY 建索引更慢了
MySQL 是一种流行的开源关系数据库管理系统,而 `GROUP BY` 语句在数据处理和统计分析过程中尤为重要。在某些情况下,使用 `GROUP BY` 的速度会变慢,尤其是与索引相关时。接下来,我将带你逐步了解如何解决这个问题,从基本概念到实际应用,帮助你更好地理解 MySQL 的性能调优。
## 1. 了解 GROUP BY
原创
2024-10-26 03:22:38
35阅读
# SQL Server 加了 TOP 1 反而更慢了:我们为什么会遇到这个问题?
在使用 SQL Server 进行数据查询时,`TOP` 子句通常被用来限制结果集的大小。这看似是一个优化查询性能的方法,但在某些情况下,加上 `TOP 1` 反而会使查询的执行速度变慢。这种情况的出现往往与数据量、索引、查询计划等多个因素有关。本文将深入探讨这个问题,并提供一些代码示例来帮助理解。
## 查询
# MySQL中的OR走索引的实践指南
在SQL数据库中,优化查询性能是开发者必须关注的一个重要方面。特别是在MySQL中,如何使用索引来加速查询执行,尤其是在包含“OR”条件时,更是一个关键的挑战。本文将详细介绍如何实现MySQL中“OR走索引”的过程,并提供相应的代码示例和解释。
## 实现步骤
下面表格列出了实现“OR走索引”的主要步骤:
| 步骤 | 描述
原创
2024-09-24 06:00:27
13阅读
本系列文章目录
展开/收起
MySQL怎么运行的系列(一)mysql体系结构和存储引擎MySQL怎么运行的系列(二)Innodb缓冲池 buffer pool 和 改良版LRU算法Mysql怎么运行的系列(三)InnoDB存储结构之行结构和页结构MySQL怎么运行的系列(四)Innodb索引结构和方案MySQL怎么运行的系列(五)Innodb表空间(tab
转载
2023-10-30 19:08:03
176阅读
一般情况下,我们会在一个索引上较多的使用等值查询或者范围查询,此时索引大多可以帮助我们极快的查询出我们需要的数据。那当我们在where条件中对索引列使用!=查询,索引还能发挥他的作用吗?以此SQL为例:select * from t where k != 6;
复制代码MySQL会如何执行这个SQL呢?是直接全表扫描吗?其实,走不走索引,只取决于一个因素,那就是成本。我们知道,MySQL中有一个
转载
2024-02-02 13:00:20
26阅读
文章目录前言一、索引的常见模型二、InnoDB的索引模型三、索引的维护四、索引的优化覆盖索引联合索引最左前缀原则索引下推 前言我们在看书的时候,打算回看某一个桥段的内容时。这是你肯定会是先翻看书的目录,从目录确定这段内容的位置,然后再到确切的页中去寻找。你肯定不会,从书的第一页一页一页的翻找。同样,数据库也是,查找数据也不会从一条记录一条记录的寻找。也肯定是先从像书的目录一样的中确定了,才寻找。
转载
2024-06-12 08:21:31
54阅读
一:走索引情况和不走索引情况: 1:in走索引 2:范围查找走索引 3:模糊查询只有左前缀使用索引 4:反向条件不走索引:<>、!=、not in、is not null-- 索引无效
select .. from .. where sal != 3000 ;
-- 索引生效
select .. from .. where sal < 3000 or sal > 3000
转载
2023-09-28 13:43:26
163阅读
说明在MySQL中,并不是你建立了索引,并且你在SQL中使用到了该列,MySQL就肯定会使用到那些索引的,有一些情况很可能在你不知不觉中,你就“成功的避开了”MySQL的所有索引。索引列参与计算如果where条件中age列中使用了计算,则不会使用该索引。如果需要计算,千万不要计算到索引列,想方设法让其计算到表达式的另一边去。SELECT `sname` FROM `t_stu` WHERE `ag
转载
2023-08-30 15:16:08
152阅读