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

MySQL优化底层逻辑

前言去年刚开始写博客的时候写了一篇《MySQL性能调优参考》,文章中提到优化的几个技巧,比如数据类型的使用、范式和反范式的合理使用、索引的使用及其使用的注意事项等等。...其中我们接触最多的就是索引,你可能知道索引的底层结构是B+Tree、使用索引要遵守最左匹配原则,那你知道为什么要用B+Tree、为什么使用索引有那么多注意事项吗?...索引的底层结构首先,MySQL索引的存储不仅仅只有B+Tree的结构,还有Hash和全文,这个在创建索引时可以指定。...怎么理解索引失效不论是WHERE条件也好,查询字段也罢,是否使用索引或者使用哪个索引都是「优化器」来决定的,以下几个是优化器工作时索引失效的例子及说明:当索引列的唯一值与总行数的区分度很小,比如索引列的值就是男和女...当优化器看到WHERE条件中有OR关键字时,会看前后两个字段是否都是索引列,因为OR的含义就是两个只要满足一个即可,所以只要有一个不是索引列就会进行全表扫描。

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

    从ES底层原理来看查询优化

    ES 底层设计概览 ES 底层(或者说内核)是基于 Lucene,本文从 ES 查询流程以及 Lucene 底层的一些存储结构设计设计, 来分析 ES 的一些查询优化方向 ES 查询模型 上图是 ES...Lucene 索引设计 ES 底层是 Lucene, 说到索引设计, 大部分同学都知道 ES 是基于倒排索引来进行文档检索, 即一个分词(term)对应一个 docsList。...存储结构如下: ES 优化策略 了解了 ES/Lucene 索引的一些底层设计, 那来看看一些优化方法论 分片数,副本数,索引规模的合理评估 在 ES 6.6 或以上的版本, 官方提供了索引生命周期管理...同时为了避免字段爆炸,ES 有如下优化使用方式: 用户可以在某个父层级字段设置 enabled: false 来防止其下面创建子字段 mapping ,但是能被行存查询出来。...如果查询条件与索引排序顺序一致,查询性能将得到显著提升),通过牺牲少量的写入性能,在写入时将文档归类放置存储,非常有利于查询裁剪 Merge 优化 Forcemerge 优化 ES 的写入模型采用的是类似

    69220

    iOS 底层拾遗:autorelease 优化

    优化点: 这个场景少了一步autorelease,少了一步retain,优化效果就变得明显了。 如何判断 autorelease 是否需要优化?...那么只要被调用方拿到调用方的lr判断就行了,所以是否进行这个优化的决定权在调用方手中。...函数强制改为objc_autoreleaseReturnValue等方法,且 MRC 下编译的代码在调用方法时不会加入mov fp fp企图优化(推理也可知,因为retain/release操作是不能优化的...,所以当调用方是 ARC,被调用方是 MRC 时这个优化仍然有效。...为什么要双方协商 autorelease 优化? 总结一下: 不管被调用方是 MRC 还是 ARC,进行autorelease操作时都会尝试去优化,但是只有调用方是 ARC 时才能优化成功。

    1.4K21

    iOS底层原理——启动优化及其原理

    3个方面我们可以进行以下优化: 尽量少使用动态库链接,移除不需要的动态库,尽量使用系统库,且苹果建议数量控制在 6个以下。...关于启动优化的需要了解的概念 我们进行启动优化就要了解下相关的概念,以便我们了解其实现的原理。 2.1 物理内存和虚拟内存 在最早开发中,我们程序在操作系统中运行。...3. pageFault调试&启动优化的原理 在虚拟内存部分,我们知道,当进程访问一个虚拟内存page,而对应的物理内存不存在时,会触发缺页中断(Page Fault),因此阻塞进程。...因此,我们的优化思路就是:将所有启动时刻需要调用的方法,排列在一起,即放在一个页中,这样就从多个Page Fault变成了一个Page Fault。...总结 任何优化都是建立在浪费的基础上,我们在进行启动优化的时候除了常规的方法减少+load的使用,使用懒加载,移除合并一些类之后我们还可以进行二进制重排,通过减少页的中断。

    64610

    .NET-记一次架构优化实战与方案-底层服务优化

    前言   经过上一篇《.NET-记一次架构优化实战与方案-前端优化》与大家分享了对页面加载优化的心得和经历。虽然优化前端的性能效率,但是由于底层服务的触发方式,根本性问题仍然存在的。...问题分析   在本系列第一篇文章我们提到,底层服务是一系列的JOB,那么问题主要存在以下两点: 代码冗余 时效低 代码冗余 例如: 领奖方法不统一,一次性的写一套,可循环的又写一套。...随着数据源数据量增加,查询耗时也逐渐增加   以上问题直接导致了,用户完成任务后无法及时查看完成任务并领奖,如需及时查看状态需要在展示页面逻辑额外添加查询后更新的操作 优化实施 流程图 ?...方案一(抽离公共点) 目的:减少代码冗余,提高可维护性,提高后续新任务的开发效率 具体实施:从业务流程图可以直观的观察出,整个底层业务流程基本一致,只有数据源上的差异,因此可以从以下方面入手优化: 抽离出唯一的自动发奖

    45610

    mysql进阶优化篇04——深入JOIN语句的底层原理

    长跑型选手,立志坚持写10年博客,专注于java后端 专栏简介:mysql基础、进阶,主要讲解mysql数据库sql刷题、进阶知识,包括索引、数据库调优、分库分表等 文章简介:本文将介绍JOIN语句的底层原理...01——四万字详解数据库性能分析工具(深入、全面、详细,收藏备用) Mysql进阶优化篇02——索引失效的10种情况及原理 Mysql进阶优化篇03——多表查询的优化 大厂SQL面试真题大全 文章目录...该专栏的上一篇博客Mysql进阶优化篇03——多表查询的优化已经总结了优化器选择的规律:两表中一个表有索引,一个表没有索引,则没有索引的为驱动表,有索引的为被驱动表;两个表都没有索引,则小表驱动大表。...实际上,查询优化器会帮你把外连接改造为内连接,然后根据其优化策略选择驱动表与被驱动表。 不信您可以执行下面sql对比验证。...同时,我们接下来层层深入JOIN语句的底层原理,揭开神秘面纱。

    2K20

    Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)

    Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁、偏向锁)...但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。...JDK中对Synchronized做的种种优化,其核心都是为了减少这种重量级锁的使用。JDK1.6以后,为了减少获得锁和释放锁所带来的性能消耗,提高性能,引入了“轻量级锁”和“偏向锁”。...四、其他优化 1、适应性自旋(Adaptive Spinning):从轻量级锁获取的流程中我们知道,当线程在获取轻量级锁的过程中执行CAS操作失败时,是要通过自旋来获取重量级锁的。...五、总结   本文重点介绍了JDk中采用轻量级锁和偏向锁等对Synchronized的优化,但是这两种锁也不是完全没缺点的,比如竞争比较激烈的时候,不但无法提升效率,反而会降低效率,因为多了一个锁升级的过程

    64820

    面试必问系列:MySQL 索引合并优化底层原理

    索引合并优化是一种查询优化技术,它利用多个索引来加速查询的执行。...准备准备我们需要的数据,并插入10条数据:注:数据量太少会导致优化器选择其它执行计划,大家可以插入1000条左右数据或使用强制索引。...`, `merchant_id`, `area`) VALUES (10, '10', 10, 10);合并算法Index Merge 合并有几种常见算法,显示在输出Extra字段 中EXPLAIN,优化器会根据成本估算选择合适的算法...配置项查看:SHOW VARIABLES LIKE 'optimizer_switch';优化优化器会根据成本分析结果选择成本最低的执行计划。比如下列语句在数据量比较少了会选择全表扫描。...在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。

    1.2K42

    【多线程与高并发】- 锁的机制与底层优化原理

    转发请携带作者信息@怒放吧德德 @一个有梦有戏的人前言最近经常研究一些关于线程并发的问题,再开发中也实实在在遇到过许多的并发问题,之前所学的是如何解决这些问题,然而接下来就得理解一下底层原理。...,通过unsafe类调用自增方法,实际底层原理也是进行比较交换的规则来保证原子性。...,它底层是通过c++编写的。...compare_value), "r" (dest), "r" (mp) : "cc", "memory"); return exchange_value;}Synchronized底层的锁优化机制...(2)、锁升级流程在Java中,synchronized锁的状态可以根据竞争情况进行升级和降级,结合上图,我们就可以清晰的了解synchronized底层锁的状态变化过程。

    18510

    Linux虚拟网络设备:底层原理与性能优化深度解析

    在深入探讨Linux虚拟网络设备的底层原理之前,重要的是要理解这些设备如何在Linux内核中实现,以及它们如何与操作系统的其他部分交互以提供高效且灵活的网络功能。...性能优化和挑战 ⚙️虽然虚拟网络设备提供了极大的灵活性和配置选项,但它们也带来了性能挑战。数据包必须在用户空间和内核空间之间传递,可能会增加延迟和CPU开销。...为了解决这些问题,Linux内核引入了多种优化技术,如零拷贝网络传输、批处理数据包、以及使用增强的网络栈路径,这些都是为了减少虚拟网络设备引入的开销。5.1....结论 Linux虚拟网络设备及其底层技术提供了构建高度灵活、可扩展和安全网络环境的强大工具。通过不断的技术创新和优化,Linux内核使得在没有物理网络硬件的情况下实现复杂网络架构成为可能。

    17800

    快手:需要GPU底层优化

    如何对此过程进行优化是问题的关键所在。...此优化方案和技术也可以扩展至众多不同的基于 Transformer 架构的模型,快手希望借助这些 Transformer 家族模型的优化有效推进相关应用的大规模高效部署。...Transformer 的 GPU 底层优化核心技术 根据 Transformer 的架构特点,快手的研究者在 Nvidia Faster Transformer 开源库 [14] 基础上针对具体的模型应用从算子...内存管理优化 研究者在内存管理上进行了大量优化工作。图 8 是 Transformer Encoder、Decoder 及 Beam Search 的内存管理示意图。 ?...图 11:Transformer GEMM 配置的优化 总结 快手的研究者从底层优化出发,在充分分析 Transformer 的网络结构,算子特性以及 GPU 硬件特性的基础上,通过软硬件联合设计的思想对

    1.6K10
    领券