
Java原理
文章平均质量分 90
Java原理
Java学习训练营
爱老婆 爱编程!
展开
-
分布式缓存,就该这样设计
在高并发的分布式的系统中,缓存是必不可少的一部分。没有缓存对系统的加速和阻挡大量的请求直接落到系统的底层,系统是很难撑住高并发的冲击,所以分布式系统中缓存的设计是很重要的一环。下面就来聊聊分布式系统中关于缓存的设计以及过程中遇到的一些问题。缓存的收益与成本使用缓存我们得到以下收益: 加速读写:因为缓存通常是全内存的,比如Redis、Memcache。对内存的直接读写会比传统的存储层如MySQL,性能好很多。举个例子:同等配置单机Redis QPS可轻松上万,MySQL则只有几千。加速读写之原创 2022-05-11 19:08:22 · 300 阅读 · 0 评论 -
消息队列必问
面试官在面试候选人时,如果发现候选人的简历中写了在项目中使用了 MQ 技术(如 Kafka、RabbitMQ、RocketMQ),基本都会抛出一个问题:在使用 MQ 的时候,怎么确保消息 100% 不丢失?这个问题在实际工作中很常见,既能考察候选者对于 MQ 中间件技术的掌握程度,又能很好地区分候选人的能力水平。接下来,我们就从这个问题出发,探讨你应该掌握的基础知识和答题思路,以及延伸的面试考点。案例背景以京东系统为例,用户在购买商品时,通常会选择用京豆抵扣一部分的金额,在这个过程中,交易服务和原创 2022-05-11 19:08:17 · 212 阅读 · 0 评论 -
MQ 幂等、去重 有哪些通用的解决方案?
消息中间件是分布式系统常用的组件,无论是异步化、解耦、削峰等都有广泛的应用价值。我们通常会认为,消息中间件是一个可靠的组件——这里所谓的可靠是指,只要我把消息成功投递到了消息中间件,消息就不会丢失,即消息肯定会至少保证消息能被消费者成功消费一次,这是消息中间件最基本的特性之一,也就是我们常说的“AT LEAST ONCE”,即消息至少会被“成功消费一遍”。举个例子,一个消息M发送到了消息中间件,消息投递到了消费程序A,A接受到了消息,然后进行消费,但在消费到一半的时候程序重启了,这时候这个消息并没有标记原创 2022-05-11 19:08:13 · 279 阅读 · 0 评论 -
微服务如何聚合 API 文档?
为什么需要聚合?微服务模块众多,如果不聚合文档,则访问每个服务的API文档都需要单独访问一个Swagger UI界面,这么做客户端能否接受?反正作为强迫症的我是接受不了.......既然使用了微服务,就应该有统一的API文档入口。如何聚合?统一的文档入口显然应该聚合到网关中,通过网关的入口统一映射到各个模块。演示本文采用Spring Cloud Gateway聚合Swagger的 方式 生成API文档。案例源码结构如下:本文只介绍如何聚合Swagger,...原创 2022-05-11 19:08:08 · 370 阅读 · 0 评论 -
微服务下蓝绿发布、滚动发布、灰度发布等方案
在项目迭代的过程中,不可避免需要上线。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。目前有很多部署发布的技术, 这儿将常见的做一个总结。上面所说难免有些抽象, 举一个情景例子, 假如你是微博项目负责人员, 现在新版本较原来的老版本有很大的改变, 这设计到服务架构、前端UI等等, 经过测试功能没有障碍, 那么这时候如何让用户切换到新的版本呢?显而易见, 第一次发布的应用是没有所谓的这个问题的, 这种如何发布的思考只会出现在后面的版本迭代中。蓝绿发布蓝绿部署中,一共有两套系统:原创 2022-05-11 19:08:04 · 731 阅读 · 0 评论 -
openFeign如何实现全链路JWT令牌信息不丢失?
什么是令牌中继?令牌中继通俗的讲则是让令牌在微服务链路调用中传递下去,保证各个微服务能够获取令牌中的用户信息。以下订单的例子来说,如下图:下单流程客户端携带令牌请求网关,网关鉴权成功后会将令牌中的用户信息解析出来放在请求头中下发给订单服务,同样的,订单服务需要将用户信息传递给账户服务获取该用户的账户信息。那么问题来了?如何保证网关服务->订单服务->账户服务这条链路中的用户信息传递下去是个痛点解决方案令牌在openFeign调用过程中是不能自动中继的,因此必须手动原创 2022-05-11 19:07:46 · 311 阅读 · 0 评论 -
跨库多表存在大量数据依赖问题有哪些解决方案?
曾经设计的一个供应链系统中,存在商品、销售订单、采购这三个服务,它们的主数据的部分结构如下所示:商品:ID 名称 分类 型号 生产年份 编码 订单和子订单:订单ID 下单时间 客户 总金额 子订单ID 商品ID 单价 数量 采购单和子订单:采购单ID 下单时间 供应商 总金额 采购子原创 2022-05-03 21:20:48 · 193 阅读 · 0 评论 -
分布式链路追踪之Spring Cloud Sleuth夺命连环9问
为什么需要链路追踪?大型分布式微服务系统中,一个系统被拆分成N多个模块,这些模块负责不同的功能,组合成一套系统,最终可以提供丰富的功能。在这种分布式架构中,一次请求往往需要涉及到多个服务,如下图:服务之间的调用错综复杂,对于维护的成本成倍增加,势必存在以下几个问题: 服务之间的依赖与被依赖的关系如何能够清晰的看到? 出现异常时如何能够快速定位到异常服务? 出现性能瓶颈时如何能够迅速定位哪个服务影响的? 为了能够在分布式架构中快速定位问题,分布式链路追踪应运而生。..原创 2022-05-03 21:18:06 · 393 阅读 · 0 评论 -
Spring Cloud Gateway连环10问
为什么需要网关?传统的单体架构中只有一个服务开放给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,那么作为客户端如何去调用这些微服务呢?如果没有网关的存在,只能在本地记录每个微服务的调用地址。无网关的微服务架构往往存在以下问题: 客户端多次请求不同的微服务,增加客户端代码或配置编写的复杂性。 认证复杂,每个服务都需要独立认证。 存在跨域请求,在一定场景下处理相对复杂。 网关的基本功能?网关是所有微服务的门户,路由转发仅仅是最基本...原创 2022-05-03 21:12:10 · 1609 阅读 · 0 评论 -
Redis 实战:巧用 Bitmap 实现亿级海量数据统计
在移动应用的业务场景中,我们需要保存这样的信息:一个 key 关联了一个数据集合。常见的场景如下: 给一个 userId ,判断用户登陆状态; 显示用户某个月的签到次数和首次签到时间; 两亿用户最近 7 天的签到情况,统计 7 天内连续签到的用户总数; 通常情况下,我们面临的用户数量以及访问量都是巨大的,比如百万、千万级别的用户数量,或者千万级别、甚至亿级别的访问信息。所以,我们必须要选择能够非常高效地统计大量数据(例如亿级)的集合类型。如何选择合适的数据集合,我们原创 2022-05-11 19:07:21 · 361 阅读 · 0 评论 -
MySQL调优
这里的主要是分享索引方面的调优,在工作中,很多同学都有建立索引的一些经验,但是是否有自己深入的思考过,怎么样建立索引才最合适。字符串怎么建立索引、怎么优化联合索引、怎么避免回表等一些问题,是否有结合自己的实际项目进行深入的思考呢?这里,我就将自己实际中遇到的一些问题分享给大家,下面开始我们的正题,首先开始之前,先来回顾一些基础的知识。什么是Mysql的索引,联合索引是什么?回表是什么?回表怎么解决?Mysql索引Mysql的索引是一种加快查询速度的数据结构,索引就好比书的目录一样能够快速原创 2022-05-11 19:07:13 · 172 阅读 · 0 评论 -
SQL慢查询处理
前几天帮公司解决线上慢SQL告警问题,遇到了几个case。下面我会结合case案例分析自己这段时间在工作上遇到的慢查询谈谈数据库如何优化慢查询。一般我们遇到的慢sql都是索引没有正确使用导致的,所以我先介绍下索引相关知识索引介绍索引概念排好序的快速查找的数据结构(我们平时说的索引,如果没有特别指明,都是指B树,其中聚集索引、次要索引、覆盖索引、复合索引、前缀索引、唯一索引默认使用的都是B+树索引,除B+树这种类型的索引外还有哈希索引等)索引优缺点优点: 查找 :提高数据检索原创 2022-05-11 19:07:02 · 800 阅读 · 0 评论 -
Redis夺命连环20问
金九银十即将到来,整理了20道经典Redis面试题,希望对大家有帮助。1. 什么是Redis?它主要用来什么的?Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常原创 2022-05-10 21:14:34 · 779 阅读 · 0 评论 -
20道Mysql面试题
1.什么Mysql的事务?事务的四大特性?事务带来的什么问题?Mysql中事务的隔离级别分为四大等级:读未提交(READ UNCOMMITTED)、读提交 (READ COMMITTED)、可重复读 (REPEATABLE READ)、串行化 (SERIALIZABLE)。在Mysql中事务的四大特性主要包含:原子性(Atomicity)、一致性(Consistent)、隔离性(Isalotion)、持久性(Durable),简称为ACID。 原子性:是指事务的原子性操作,对数据的修改要么全部原创 2022-05-10 21:14:26 · 240 阅读 · 0 评论 -
缓存和数据库到底先写哪个?
大型高并发的后端服务系统,处理瓶颈往往是数据库,比如mysql的查询写入。为了能够快速响应用户请求,系统优化自然会想到利用缓存加快处理速度,常用的比如redis,性能非常高的缓存数据库。redis搭配mysql一起使用,绝配。但,没有免费的午餐,你要用缓存,就不得不面对缓存和数据库不一致的问题,解决这种不一致有通用设计模式(其实不仅仅是数据库上的应用),陈皓这篇文章讲的比较全面。来源:coolshell.cn链接:https://coolshell.cn/articles/17416.htm原创 2022-05-10 21:14:11 · 428 阅读 · 0 评论 -
Redis 16 个常见使用场景
目录 缓存 数据共享分布式 分布式锁 全局ID 计数器 限流 位统计 购物车 用户消息时间线timeline 消息队列 抽奖 点赞、签到、打卡 商品标签 商品筛选 用户关注、推荐模型 排行榜 1、缓存String类型例如:热点数据缓存(例如报表、明星出轨),对象缓存、全页缓存、可以提升热点数据的访问数据。2、数据共享分布式String原创 2022-05-10 21:13:59 · 240 阅读 · 0 评论 -
万字详解MySQL性能优化
说起MySQL的查询优化,相信大家积累一堆技巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型….. 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。MySQL逻辑架构如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。My原创 2022-05-10 21:13:47 · 291 阅读 · 0 评论 -
如果mysql磁盘满了,会发生什么?
使用命令发现磁盘使用率为100%了,还剩几十兆。一系列神操作备份数据库,删除实例、删除数据库表、重启mysql服务,结果磁盘空间均没有释放。怎么办网上查了很多资源,说要进行磁盘碎片化整理。原因是datafree占据的空间太多啦。具体可以通过这个sql查看。SELECTCONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),'MB')ASdata_size,CONCAT(TRUNCATE(SUM(max_data_length)/10...原创 2022-05-10 21:13:27 · 351 阅读 · 0 评论 -
升级了MySQL驱动8.0,导致应用大量超时
最近同事发现新服务用的驱动都是 MySQL8.0,而一些老系统 MySQL 驱动版本较低,存在一些危险漏洞,于是主动的把一些老应用的 MySQL 驱动程序升级到了 8.0。然而升级后,在并发量较高时,查看监控打点,Druid 连接池拿到连接并执行 SQL 的时间大部分都超过 200ms。本文详细的分析了这次“破案”的全过程。对系统进行压测,发现出现大量线程阻塞的情况,线程 dump 信息如下:"http-nio-5366-exec-48"#210daemonprio=5os_prio=...原创 2022-05-10 21:13:20 · 3099 阅读 · 1 评论 -
Java+Redis位图实现点赞签到相关功能
前言对于我们平时的一些社区应用,如微博,知乎,掘金等应用点赞,评论这类功能是不可或缺的,例如点赞功能我们其实是可以通过 mysql 去做实现的,但是每次点赞都去实时改库可以想象一下当遇到一个热点文章例如,前段时间大火特火的爆料某艺人日薪多少帖子,这个上千万乃至亿级的点赞量,这个时候我们再去实时改库的话就不那么恰当,今天我们介绍的主角是Redis的位图操作,接下来我们引出正题,来看一下位图是这么做到的;开始热身介绍在 Redis 里位图并不是一个真正的数据类型,其实就是一种普通的字符串..原创 2022-05-10 21:13:11 · 826 阅读 · 0 评论 -
MySQL 的 Binlog 日志处理的4款工具对比
Canal Maxwell Databus 阿里云的数据传输服务DTS Canal定位:基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql。原理: canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议 mysql master收到dump请求,开始推送binary log给slave(也就是canal) canal解析binary lo..原创 2022-05-10 21:12:53 · 991 阅读 · 0 评论 -
索引失效的场景有哪些?
虽然你这列上建了索引,查询条件也是索引列,但最终执行计划没有走它的索引。下面是引起这种问题的几个关键点。列与列对比某个表中,有两列(id和c_id)都建了单独索引,下面这种查询条件不会走索引select*fromtestwhereid=c_id;这种情况会被认为还不如走全表扫描。存在NULL值条件我们在设计数据库表时,应该尽力避免NULL值出现,如果非要不可避免的要出现NULL值,也要给一个DEFAULT值,数值型可以给0、-1之类的, 字符串有时候给空串有问题,就给一...原创 2022-05-10 20:57:26 · 380 阅读 · 0 评论 -
MySQL 索引和 SQL 调优实战
MySQL索引MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引。MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。MySQL索引原理索引目的索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词原创 2022-05-09 11:13:40 · 2426 阅读 · 0 评论 -
分库分表:如何做到永不迁移数据和避免热点?
中大型项目中,一旦遇到数据量比较大,小伙伴应该都知道就应该对数据进行拆分了。有垂直和水平两种。垂直拆分比较简单,也就是本来一个数据库,数据量大之后,从业务角度进行拆分多个库。如下图,独立的拆分出订单库和用户库。水平拆分的概念,是同一个业务数据量大之后,进行水平拆分。上图中订单数据达到了4000万,我们也知道mysql单表存储量推荐是百万级,如果不进行处理,mysql单表数据太大,会导致性能变慢。使用方案可以参考数据进行水平拆分。把4000万数据拆分4张表或者更多。当然也可以分库,再分表;原创 2022-05-09 11:13:13 · 369 阅读 · 0 评论 -
场景+案例分析,SQL优化
前言 SQL优化一般步骤 1、通过慢查日志等定位那些执行效率较低的SQL语句 2、explain 分析SQL的执行计划 3、show profile 分析 4、trace 5、确定问题并采用相应的措施 场景分析 案例1、最左匹配 案例2、隐式转换 案例3、大分页 案例4、in + order by 案例5、范围查询阻断,后续字段不能..原创 2022-05-09 11:11:14 · 161 阅读 · 0 评论 -
MySQL 唯一索引为什么会导致死锁?
唯一性索引unique影响唯一性索引表创建DROPTABLEIFEXISTS`sc`;CREATETABLE`sc`(`id`int(11)NOTNULLAUTO_INCREMENT,`name`varchar(200)CHARACTERSETutf8DEFAULTNULL,`class`varchar(200)CHARACTERSETutf8DEFAULTNULL,`score...原创 2022-05-09 11:10:44 · 1385 阅读 · 1 评论 -
优化MySQL亿级数据分页
1月22号晚上10点半,下班后愉快的坐在在回家的地铁上,心里想着周末的生活怎么安排。突然电话响了起来,一看是我们的一个开发同学,顿时紧张了起来,本周的版本已经发布过了,这时候打电话一般来说是线上出问题了。果然,沟通的情况是线上的一个查询数据的接口被疯狂的失去理智般的调用,这个操作直接导致线上的MySql集群被拖慢了。好吧,这问题算是严重了,下了地铁匆匆赶到家,开电脑,跟同事把Pinpoint上的慢查询日志捞出来。看到一个很奇怪的查询,如下POST domain/v1.0/module/m.原创 2022-05-09 11:10:16 · 368 阅读 · 0 评论 -
血一般的教训,请慎用insert into select
公司的交易量比较大,使用的数据库是 MySQL,每天的增量差不多在百万左右,公司并没有分库分表,所以想维持这个表的性能只能考虑做数据迁移。同事李某接到了这个任务,于是他想出了这两个方案: 先通过程序查询出来,然后插入历史表,再删除原表。 使用 insert into select 让数据库 IO 来完成所有操作。 第一个方案使用的时候发现一次性全部加载,系统直接就 OOM 了,但是分批次做就过多 IO 和时间长,于是选用了第二种方案,测试的时候没有任何问题,开原创 2022-05-09 11:09:30 · 977 阅读 · 0 评论 -
内存耗尽后Redis会发生什么?
设置有效期使用Redis服务时,很多情况下某些键值对只会在特定的时间内有效,为了防止这种类型的数据一直占有内存,我们可以给键值对设置有效期。Redis中可以通过4个独立的命令来给一个键设置过期时间: expire key ttl:将key值的过期时间设置为ttl秒。 pexpire key ttl:将key值的过期时间设置为ttl毫秒。 expireat key timestamp:将key值的过期时间设置为指定的timestamp秒数。 ...原创 2022-05-09 11:09:01 · 349 阅读 · 0 评论 -
SQL 为啥执行这么慢 ?
1. MySQL查询慢是什么体验?谢邀,利益相关。大多数互联网应用场景都是读多写少,业务逻辑更多分布在写上。对读的要求大概就是要快。那么都有什么原因会导致我们完成一次出色的慢查询呢?1.1 索引在数据量不是很大时,大多慢查询可以用索引解决,大多慢查询也因为索引不合理而产生。MySQL 索引基于 B+ 树,这句话相信面试都背烂了,接着就可以问最左前缀索引、 B+ 树和各种树了。说到最左前缀,实际就是组合索引的使用规则,使用合理组合索引可以有效的提高查询速度,为什么呢?因为索引下推。原创 2022-05-09 11:08:26 · 352 阅读 · 0 评论 -
52条SQL语句性能优化策略
本文会提到 52 条 SQL 语句性能优化策略。1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 WHERE 及 ORDER BY 涉及的列上建立索引。2、应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,创建表时 NULL 是默认值,但大多数时候应该使用 NOT NULL,或者使用一个特殊的值,如 0,-1 作为默认值。3、应尽量避免在 WHERE 子句中使用 !=或 <> 操作符。MySQL 只有对以下操作符才使用索引:<,<=,=,&g.原创 2022-05-09 11:08:01 · 183 阅读 · 0 评论 -
阿里规定超过三张表禁止join,Why?
一、 问题提出《阿里巴巴JAVA开发手册》里面写超过三张表禁止join,这是为什么?二、问题分析对这个结论,你是否有怀疑呢?也不知道是哪位先哲说的不要人云亦云,今天我设计sql,来验证这个结论。(实验没有从代码角度分析,目前达不到。可以把mysql当一个黑盒,使用角度来验证这个结论) 验证结论的时候,会有很多发现,各位往后看。三、 实验环境vmware10+centos7.4+mysql5.7.22 centos7内存4.5G,4核,50G硬盘。 mysql配置为原创 2022-05-09 11:07:31 · 967 阅读 · 0 评论 -
delete后加 limit好吗?
在业务场景要求高的数据库中,对于单条删除和更新操作,在 delete 和 update 后面加 limit 1 绝对是个好习惯。比如,在删除执行中,第一条就命中了删除行,如果 SQL 中有 limit 1;这时就 return 了,否则还会执行完全表扫描才 return。效率不言而喻。那么,在日常执行 delete 时,我们是否需要养成加 limit 的习惯呢?是不是一个好习惯呢?在日常的 SQL 编写中,你写 delete 语句时是否用到过以下 SQL?deletefromtwh...原创 2022-05-08 16:20:49 · 445 阅读 · 0 评论 -
Mysql 索引优化
1.概述在下文的查询优化中,主要围绕的问题:Mysql为何会选错索引?2.优化历程2.1,定位问题为了便于描述,贴出建表语句(表中数据约有400万行):MySQL > show create table demo_table\G *************************** 1\. row *************************** Table: demo_table Create Table:原创 2022-05-08 16:20:41 · 435 阅读 · 0 评论 -
分布式缓存的十个坑
目录前言目前工作中用到的分布式缓存技术有redis和memcached两种,缓存的目的是为了在高并发系统中有效降低DB的压力,但是在使用的时候可能会因为缓存结构设计不当造成一些问题,这里会把可能遇到的坑整理出来,方便日后查找。一. 常用的两种缓存技术的服务端特点1. Memcache服务端Memcache(下面简称mc)服务端是没有集群概念的,所有的存储分发全部交由mc client去做,我这里使用的是xmemcached,这个客户端支持多种哈希策略,默认使用key与实例数取模来..原创 2022-05-08 16:20:22 · 338 阅读 · 0 评论 -
Redis实现一个轻量级的搜索引擎
但有的查询条件极其复杂,再加上库表中设计的各种不合理,导致查询接口特别难写,然后加班什么的就不用说了(不知各位有没有这种感受呢~)。下面以一个例子开始,这是某购物网站的搜索条件,如果让你实现这样的一个搜索接口,你会如何实现?当然你说借助搜索引擎,像 Elasticsearch 之类的,你完全可以实现。但我这里想说的是,如果要你自己实现呢?从上图中可以看出,搜索总共分为 6 大类,每大类中又分了各个子类。这中间,各大类条件之间是取的交集,各子类中有单选、多选、以及自定义的情况,原创 2022-05-08 16:20:10 · 236 阅读 · 0 评论 -
SQL优化极简法则
SQL 本身并不难学,编写查询语句也很容易,但是想要编写出能够高效运行的查询语句却有一定的难度。查询优化是一个复杂的工程,涉及从硬件到参数配置、不同数据库的解析器、优化器实现、SQL 语句的执行顺序、索引以及统计信息的采集等,甚至应用程序和系统的整体架构。本文介绍几个关键法则,可以帮助我们编写高效的 SQL 查询;尤其是对于初学者而言,这些法则至少可以避免我们写出性能很差的查询语句。以下法则适用于各种关系型数据库,包括但不限于:MySQL、Oracle、SQL Server、Po原创 2022-05-08 16:19:46 · 113 阅读 · 0 评论 -
SQL:事务隔离性
概念 隔离性与隔离级别 事务隔离的实现 事务启动方式 MVCC工作原理 总结 一、概念事务到底是什么东西呢?想必大家学习的时候也是对事务的概念很模糊的。接下来通过一个经典例子讲解事务。银行在两个账户之间转账,从A账户转入B账户1000元,系统先减少A账户的1000元,然后再为B账号增加1000元。如果全部执行成功,数据库处于一致性;如果仅执行完A账户金额的修改,而没有增加B账户的金额,则数据库就处于不一致状态,这时就需要取消前面的操作。..原创 2022-05-08 16:19:26 · 222 阅读 · 0 评论 -
SQL优化
前言BATJTMD等大厂的面试难度越来越高,但无论从大厂还是到小公司,一直未变的一个重点就是对SQL优化经验的考察。一提到数据库,先“说一说你对SQL优化的见解吧?”。SQL优化已经成为衡量程序猿优秀与否的硬性指标,甚至在各大厂招聘岗位职能上都有明码标注,如果是你,在这个问题上能吊打面试官还是会被吊打呢?注:如果看着模糊,可能是你撸多了目录前言SELECT语句 - 语法顺序:SELECT语句 - 执行顺序:SQL优化策略一、避免不走索引的场景二、SELECT语句其原创 2022-05-08 16:19:15 · 188 阅读 · 0 评论 -
MySQL 索引和 B+Tree 讲的太通俗易懂
正确的创建合适的索引,是提升数据库查询性能的基础。在正式讲解之前,对后面举例中使用的表结构先简单看一下:createtableuser(idbigintnotnullcomment'id'primarykey,namevarchar(200)nullcomment'name',agebigintnullcomment'age',genderintnullcomment'...原创 2022-05-08 16:18:56 · 157 阅读 · 0 评论