数据库
文章平均质量分 64
Rick1993
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Mysql底层索引详解
聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个。聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分,每张表只能拥有一个聚簇索引。InnoDB的主键索引就是聚集索引,叶子节点包含了完整的数据记录,数据和索引存储在同一个文件;原创 2019-10-05 19:57:55 · 637 阅读 · 0 评论
-
线上慢SQL排查完整实战案例
负责t_order(订单表),数据量约800w条。原创 2026-05-31 23:08:53 · 272 阅读 · 0 评论 -
索引的排序和分组
c 索引有序被 b 过滤打乱,用索引要大量回表+排序,成本高 → 放弃索引,全表扫描。GROUP BY 只需要 c 有序去重分组,可以边扫边过滤,避免 filesort → 选择 c 单列索引。原创 2026-05-31 22:41:33 · 111 阅读 · 0 评论 -
MySQL 优化器会选择【最小、最精准、最高效】的索引
只查 a → 用最小的索引(单列a),不用大而全的联合索引!原创 2026-05-31 22:22:15 · 205 阅读 · 0 评论 -
只要条件字段在联合索引里,MySQL8.0+ 默认都会触发 索引下推(ICP)
命中索引:a(1个)索引下推:生效(c 参与过滤)命中索引:a、b(2个)索引下推:生效命中索引:a、b(2个)索引下推:生效。原创 2026-05-31 22:11:18 · 204 阅读 · 0 评论 -
联合索引是按顺序排好序的
前面是 = → 后面有序 → 索引能用前面是 > → 后面乱序 → 索引失效范围字段本身可以使用索引,但范围字段之后的所有字段,索引全部中断;中断和后面是in无关,只要前面出现范围,后面字段都无法走索引检索(仅能靠索引下推做数据过滤)。原创 2026-05-31 21:54:54 · 215 阅读 · 0 评论 -
mysql联合索引经典实例
where a = 1 (使用联合索引、若a字段存在单独索引,此处仍优先使用联合索引)where a = 1 and b>2 and c=3 (使用c索引)where a > 1 and b=2 and c=3 (使用c索引)where a > 1 and b=2 and c>3 (不使用索引)where a=1 and b=2 and c=3 (使用联合索引)where b = 1 and a = 2 (使用联合索引)where c = 1 order by b (使用c索引)原创 2026-05-31 21:36:37 · 294 阅读 · 0 评论 -
聚簇索引 + 二级索引 + 回表 + 索引下推
回表 = 先查二级索引拿到主键,再拿主键去查聚簇索引,多跑一遍索引树。InnoDB 聚簇索引叶子节点存整行数据,二级索引只存主键。用二级索引查询时,需要通过主键再查聚簇索引拿完整数据,这个过程叫回表。回表会增加IO,影响性能。索引下推不能解决最左前缀的问题,但能在索引层面提前过滤无效数据,减少回表次数,优化查询效率。原创 2026-05-30 22:53:05 · 198 阅读 · 0 评论 -
索引下推(ICP):在已经用到联合索引的前提下,减少回表次数,提升查询效率
联合索引跳字段(跨字段)无法使用索引的缺点,是最左前缀原则导致的,索引下推无法解决这个问题,不能让跳过的字段重新用上索引。但索引下推可以在已使用索引前缀的基础上,把剩余条件下推到存储引擎过滤,减少大量无效回表,从而提升查询效率。原创 2026-05-30 22:47:13 · 215 阅读 · 0 评论 -
索引下推(ICP,Index Condition Pushdown)
ICP 作用:减少回表次数,降低磁盘 I/O,提升查询性能。核心原理:将索引字段的过滤条件下推到存储引擎,在索引遍历阶段过滤。生效场景:联合索引、条件字段在索引中、InnoDB/MyISAM。与覆盖索引区别:覆盖索引不回表,ICP 减少回表。原创 2026-05-29 18:27:49 · 179 阅读 · 0 评论 -
sql慢查询优化
当时线上订单列表用limit大偏移分页,越往后越慢,还触发了文件排序。我先建了user_id+create_time联合索引,然后把大偏移limit改成游标分页,倒序查询用id小于上一页最后一条id做翻页,避免数据库扫描大量无效数据,同时精简查询字段,优化后耗时从3秒多降到十几毫秒。对,你说得完全对,我刚才写反了,马上给你改成面试标准正确版,直接背就行。下一页带上一页最小时间+最小id,用 id < last_id。要不要我把正序、倒序游标分页标准写法各给你一条,面试随时能说?改成游标分页(正确逻辑)原创 2026-05-04 00:13:18 · 187 阅读 · 0 评论 -
mysql 慢查询怎么快速定位
慢查询日志是定位慢 SQL 的最准方式适合实时抓正在卡的 SQLEXPLAIN是判断是否走索引的神器90% 慢查询 =没索引 or 索引失效。原创 2026-05-04 00:04:34 · 406 阅读 · 0 评论 -
mysql事务与锁机制
事务是一组不可分割的 SQL 操作,。原创 2026-04-13 18:55:12 · 169 阅读 · 0 评论 -
SQL 执行流程
你就记:从写 SQL → 到数据库返回结果,一共这几步。原创 2026-04-08 18:05:09 · 85 阅读 · 0 评论 -
慢SQL优化
我排查慢SQL首先用Explain分析执行计划,重点看 type 是否全表扫描、key 是否命中索引、rows 扫描行数、Extra 是否出现 Using filesort / Using temporary。常见问题比如:索引列函数运算、左模糊like、隐式类型转换都会造成索引失效,我会改写SQL条件;深分页用主键ID偏移优化;group by、order by 不合理引发临时表和文件排序,就设计「等值+排序」联合索引。同时杜绝 select *,用覆盖索引减少回表;原创 2026-03-29 00:28:13 · 245 阅读 · 0 评论 -
SQL优化
先看→ 加合理索引 → 改写SQL语法 → 优化业务逻辑 → 架构分层兜底(缓存/分库分表)原创 2026-03-29 00:20:56 · 266 阅读 · 0 评论 -
mysql表备份数据,改表名
在MySQL中,直接更改表名并不是一个操作,因为MySQL不允许直接更改表的名称。但是,你可以通过创建一个新表,然后将旧表的数据复制到新表中,最后删除旧表的方式来实现更改表名的目的。这个过程通常被称为“重命名表”或“迁移表数据”。原创 2025-06-12 15:32:40 · 327 阅读 · 0 评论 -
MySQL行锁机制
行锁(InnoDB)mysql 默认自动commit; oracle默认不会自动commit;暂时关闭自动commit:set autocommit = 0;原创 2019-10-30 18:07:22 · 402 阅读 · 0 评论 -
mysql Explain详解
mysql数据库逻辑分层结构:InnoDB: 事务优先(适合高并发操作,行锁)MyISAM: 性能优先 (表锁)编写过程:select distinct … from … join … on … where … group by … having … order by … limit …解析过程:from … join … on … where … group by … ha...原创 2019-10-25 10:56:25 · 528 阅读 · 0 评论 -
MySQL表锁机制
锁的分类:操作类型分类:读锁(共享锁):对同一个数据,多个读操作可以同时进行,互不干扰。写锁(互斥锁):如果当前写操作没有完毕,则无法进行其他的读写操作。操作范围:表锁:一次性对一张表加锁,如MyISAM存储引擎使用表锁,开销小,加锁快,无死锁;但是锁的范围大,容易发生锁冲突,并发度低。行锁:一次性对一条数据加锁,如InnoDB存储引擎使用行锁,开销大,加锁慢,容易出现死锁;锁的...原创 2019-10-30 16:40:43 · 239 阅读 · 0 评论 -
MySQL的事务隔离级别
什么是隔离性?隔离性是当多个用户并发访问数据库时(比如操作同一张表),数据库为每一个用户开启一个事务,且各事务之间互不干扰。什么是脏读,不可重复读,幻读?脏读:事务A读取了事务B中尚未提交的数据,如果事务B回滚了,则A读取使用了错误的数据。不可重复读:在事务A的两次读数据之间,由于事务B的修改导致事务A两次读到的数据可能是不一样的。这就发生了在一个事务内两次读到的数据不一样,这就被称作不...原创 2019-11-03 22:37:49 · 312 阅读 · 0 评论 -
Mysql索引失效
避免索引失效的原则:复合索引:复合索引不要跨列使用,尽量不要无序使用;尽量使用全索引匹配不要在索引上进行任何操作(计算,函数,类型转换),否则索引失效like尽量以“常量”开头,不要以%开头,否则索引失效尽量不要使用类型转换(显示,隐式),否则索引失效...原创 2019-10-26 18:48:06 · 206 阅读 · 0 评论 -
Mysql常用SQL语句
1,查询表字段个数select count(*) from information_schema.`COLUMNS` where TABLE_SCHEMA='m_crm_analysis' -- 数据库名 and TABLE_NAME='journal'; -- 表名2,原创 2020-04-19 20:13:43 · 327 阅读 · 0 评论 -
MySQL主从同步
集群的优点:负载均衡;失败迁移;原创 2019-10-30 22:06:45 · 191 阅读 · 0 评论 -
MySQL之MVCC实现机制
参考:MVCC实现机制原创 2022-04-29 00:21:40 · 963 阅读 · 0 评论 -
联合索引数据结构
参考:联合索引原创 2022-04-14 14:28:15 · 496 阅读 · 0 评论 -
事物的传播机制和隔离级别
数据库和spring的事物的传播机制和隔离级别1,数据库事物的传播特性和隔离级别2,spring事物的传播特性和隔离级别原创 2022-04-13 00:16:08 · 769 阅读 · 0 评论 -
mysql表字段支持表情
1,MySQL表字段支持表情设置ALTER TABLE poi_attribute_value MODIFY attribute_value TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;参考链接:https://www.cnblogs.com/tujietg/p/13358776.html原创 2020-12-09 15:14:30 · 663 阅读 · 0 评论 -
mysql offset用法
SQL查询语句中的 limit 与 offset 的区别:limit y 分句表示: 读取 y 条数据limit x, y 分句表示: 跳过 x 条数据,读取 y 条数据limit y offset x 分句表示: 跳过 x 条数据,读取 y 条数据原创 2020-11-21 16:39:48 · 17735 阅读 · 9 评论 -
使用idea根据数据库表来生成对应的实体类
打开idea,找到database,选择想要连接的数据库类型输入数据库连接信息,点击test connection ,出现Successful, 然后点击Apply, OK3, idea右边会出现数据库的表,4,选中一张表右键,进入生成实体类的脚步目录5,进入到这里,idea左边的目录,点击进入groovy脚本文件,修改成你想要的生成格式6,下面代码就是我的groovy脚...原创 2019-09-10 11:09:14 · 3489 阅读 · 0 评论 -
数据库索引
数据库索引失效的情况like “%_" 百分号在前;字符型字段为数字时在where条件里不添加引号;在索引列上使用函数,如substr,decode,instr等,或对索引列进行运算;B-tree索引is null不会走索引,is not null会走索引;位图索引is null, is not null 都会走索引;联合索引is not null 只要在建立的索引列(不分先后)都会走...原创 2019-07-16 15:47:15 · 366 阅读 · 0 评论 -
创建一个存储过程
创建一个存储器://删除已存在的drop procedure if exists create_data;//分隔符delimiter ;;create PROCEDURE create_data()BEGINdeclare i int DEFAULT 1;while i<1000doinsert into test.t_student ( name, subject,...原创 2019-07-16 12:12:59 · 2407 阅读 · 0 评论 -
mysql左连接中on and和on where的区别
on and是进行韦恩运算时 连接时就做的动作select * from a left join b on a.sid=b.sid and a.sid=1; 等价于:select * from a left join b on (a.sid=b.sid and a.sid=1);where是全部连接完后,再根据条件过滤select * from a left join b on a...原创 2019-07-13 16:42:54 · 360 阅读 · 0 评论
分享