- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
对于查询操作来说,表中数据越少,查询速度通常越快。因此,优化的方向就是将不相关的数据分离到其他表中.
案例 1:活跃数据与历史数据分表 。
如果系统的大部分业务操作集中在“活跃”数据上,可以考虑将数据划分为活跃数据表和历史数据表:
通过分表,能有效提高查询效率,减少活跃数据表的负担.
案例 2:基于用户ID分表 。
当系统涉及大量用户的私有数据时,可以根据用户ID进行分表。通过哈希算法将用户数据均匀分布到多个表中,例如分成10张表,按用户ID进行哈希分配。这样可以保证每个表中的数据量相对均衡,提高查询性能.
Mysql CPU占用高,通常是慢查询导致的。可以通过记录慢查询日志发现哪些查询语句不符合预期,导致了系统性能下降.
1.修改mysql的配置文件,开启慢查询日志。(建议在测试环境中开启并进行压测) 。
[mysqld] slow_query_log = 1 # 开启慢查询日志 slow_query_log_file = /path/to/your/slow_query.log # 慢查询日志文件路径 long_query_time = 1 # 设置慢查询的阈值,单位为秒(这里是 1 秒)
2.通过分析慢查询日志,定位性能瓶颈,进行优化.
有时候慢查询日志不多,但是mysql的CPU占用却很高。那有可能是大量的快查询堆积出来的。通过检查统计数据,可以判断有哪些查询是不符合预期的.
1.清空统计数据 。
TRUNCATE TABLE performance_schema.events_statements_summary_by_digest;
2.压力测试结束后查看统计数据 。
SELECT * FROM performance_schema.events_statements_summary_by_digest ORDER BY SUM_TIMER_WAIT DESC LIMIT 100;
案例:JPA的@NotFound(action = NotFoundAction.IGNORE)导致懒加载数据被提前加载 。
使用JPA通常使用懒加载来关联数据,但是如果用了上面的注解,就会导致懒加载失效,数据被提前加载,产生很多额外的select by id的SQL查询.
假设业务操作①和业务操作②,都需要修改A,B,C。那么不一致的修改顺序,就可能导致死锁.
死锁示例:
若同时执行这两个操作,就可能发生死锁。操作①持有 A 的锁,等待 B 的锁;操作②持有 B 的锁,等待 A 的锁,最终导致死锁.
建议:定义统一的实体修改顺序 。
为了避免死锁,建议在系统中定义一个实体的修改顺序规则,并确保所有业务操作都遵循该规则。例如:
Mysql有查询优化器,但是查询优化器有时候不靠谱。比如某个字段有索引,查询条件也用到了。但是它不用这个索引,导致全表扫描.
此时,可以考虑使用 FORCE INDEX 来强制优化器选择某个索引.
验证方式:可以导入测试数据,通过执行 EXPLAIN [SQL],你可以查看优化器是否正确选择了索引.
批量插入数据是提高效率的常见做法。但批量操作未必适合所有场景。特别是当多个数据项并非来自同一个请求或操作时,可以考虑批次管理策略.
策略:
案例:Kafka的生产消费都采用批次处理 。
建议:合理设计批次大小和时间限制 。
在处理定时任务或周期性查询时,限制查询的数据量是一个非常好的优化策略。例如,每次最多查询100条数据,防止一次查询返回大量数据,导致内存占用过高.
建议:在定期任务中,最好加上数据量的限制,避免一次性加载过多数据。如果数据量较大,可以考虑分页查询或分批处理.
在涉及时间范围的查询时,务必谨慎处理查询的时间范围。如果查询条件不明确,可能会导致全表扫描。例如,查询过期数据时,使用 expireTime < currentTime 作为条件,如果没有加上特定的时间区间,查询范围可能会过于广泛.
案例:定时任务,可以记录上一次处理的最后一个条目的时间,作为下一次查询的时间起点.
建议:在进行时间范围查询时,明确设置查询的区间,避免查询条件过于宽泛,导致性能问题.
复合索引可以显著提高查询效率,特别是在查询涉及多个字段时。它通过将多个字段组合成一个索引来加速查询。不过,需要注意的是,复合索引遵循最左前缀原则,即查询条件必须按照索引字段的顺序提供,且必须从第一个索引字段开始。如果查询条件没有从复合索引的最左边字段开始,复合索引将无法生效.
复合索引 vs 独立索引 。
假设每次查询都涉及到两个字段。如果为每个字段创建独立的索引,MySQL将需要分别扫描这两个索引树,并进行合并操作。而使用复合索引时,只需扫描一个索引树,大大提高了查询效率.
注意 。
复合索引和独立索引并不冲突。如果复合索引 IndexABC 包含字段 (A, B, C),但某些查询只需要 C 字段时,复合索引就无法生效。这时,应为 C 字段单独创建一个索引,以提高查询效率.
覆盖索引(Covering Index)指的是索引中的所有字段都能够满足查询的需求,也就是说,查询所需要的所有数据都可以从索引本身获得,而无需回到原始数据表去查询.
建议:当字段组合,例如(A,B,C)查询频率非常高的时候,可以考虑覆盖索引.
最后此篇关于【经验】几种数据库优化技巧的文章就讲到这里了,如果你想了解更多关于【经验】几种数据库优化技巧的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
1.分表思想 对于查询操作来说,表中数据越少,查询速度通常越快。因此,优化的方向就是将不相关的数据分离到其他表中。 案例 1:活跃数据与历史数据分表 如果系统的大部分业务操作集中在“活跃”数据上
该篇文章与视频是早在ITPub发布的,如今同步过来,视频与文字都下方,大家可以选择方便方式进行阅读观看。 大家好,我是陈珙,今天我想跟大家聊聊技术人的核心竞争力问题。
PHP有很多关于数组的函数,方便数组操作。 定义: 数组每个实体包含两个项:key和value,可以通过查询键来获取其相应的值。这些键可以是数值(numerical)键或关联(associati
虽然如今我们建站很容易,通过很便宜的费用购买一台虚拟主机、一个域名,以及通过开源CMS程序就可以快速搭建一个属于自己的个人网站、企业网站。但是,真正成为站长不是只要搭建好网站就行了的,我们需要解决的
我对 Ruby 一无所知,但我对 DSL 很感兴趣。 DSL 似乎是你们社区的流行语。 您是否真的出于自己的目的在 Ruby 中实现了 DSL?如果是这样,他们有多复杂,有多专注? 我看过这个ques
当我查看 Google、Amazon 等公司的职位描述时,它们都需要 C++ 和 Linux/Unix 经验。有人可以定义这在工作资格方面通常意味着什么吗?我知道如何在 Linux 中浏览文件系统吗?
上一篇介绍了 Python 枚举类型的标准库,除了考虑到其实用性,还有一个重要的原因是其实现过程是一个非常好的学习、理解 Python 类与元类的例子。因此接下来两篇就以此为例,深入挖掘 Pyt
在linux系统下学习MySQL,第一道坎就是如何在linux下安装和配置mysql。这种一劳永逸的事,我们就有耐心的做好。 系统版本:ubuntu14.04 mysql版本:mys
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
在构建 Docker 镜像时,我发现自己处在一个陌生的地方——我觉得我正在做一些别人以前已经做过很多次的事情——而且做得更好。在大多数情况下,这种直觉是绝对正确的——我正在使用一个软件并在 Docke
我正在 Pygame 中开发一款射击类游戏供我自己娱乐,在创建玩家的基本 Action 的过程中我遇到了一些疑问,“Dash”和“Switch”均未按预期工作。 ... def switch(self
尝试对以下内容进行一些研究,但没有成功。我想我会在这里问,以防有人以前遇到过它。 我帮助一家志愿者运营的广播电台满足他们的技术需求。出现的主要问题之一是他们希望以编程方式安排广告。 有很多用于广告的简
我的组织正在考虑使用 PDFlib 在我们的 Java (Spring/Tomcat) 环境中动态创建 PDF 文件 ( http://www.pdflib.com/)。 有没有人可以分享关于这个库的
我正在考虑使用 TinyMCE 来处理我开发的网站上的文本框。我已经下载了生产版本。 起初,我将在截止日期前将它用于客户网站的后端,我需要它在一开始就开箱即用。以后我也喜欢自定义选项。 基本上,Tin
上一篇解决了通过调用类对象生成实例对象过程中可能遇到的命名空间相关的一些问题,这次我们向上回溯一层,看看类对象本身是如何产生的。 我们知道 type() 方法可以查看一个对象的类型,或者说
Guice 是一个很好的框架,可以将 API 与实现分离并开始模块化您的应用程序。 OSGi 是一个很好的框架,可以在他们自己的安全环境中加载版本化服务,并通过导出的 API 提供这些服务。 假设已经
我在一家从事网络托管的 IT 公司工作,而且我个人对 SQL 非常缺乏经验*。 *看起来很糟糕 我的一个客户正在尝试将 Epos 系统与其 magento 网站集成,在 Epos 集成过程中,他们遇到
想知道在 elasticsearch 中用于多语言索引和搜索的最佳实践或经验是什么。我通读了许多资源,并尽我所能提炼出可用的索引选项: 每种语言的单独索引; 多语言字段的多字段类型; 所有可能语言的单
有人对 PHP QuickHash (http://php.net/manual/en/book.quickhash.php) 有任何经验吗? 一些早期测试表明,大型数组的内存使用量有了很大改善。包含
初识博客园 我是08年开始接触开发的,一开始涉及的就是.net和java,记得那会好像是jar6来着,net嘛还是2.0 那时候包括现在,找资料很多时候会找到博客园来 一开始我以为博客园是很多博主成
我是一名优秀的程序员,十分优秀!