在编制代码时优化数据库操作性能

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
简介: 【6月更文挑战第3天】本文介绍了代码中可使用的SQL语句优化策略,了解并应用本文介绍的这些技巧可显著提升数据库性能。

简介

数据库sql语句优化:

使用FETCHOFFSET进行分页查询,以减少SQL调用次数,提高性能;

使用LIMIT子句限制检索行数以提升查询效率;

通过INSERT n ROWS批量插入多行数据,减少数据库调用;

使用刷新交互优化分页显示,避免因实时数据更新导致的性能下降;

以及调整并发访问解析选项,如“使用当前已提交”和“跳过锁定数据”,来提高并发性和避免锁定等待。

1 编程代码中的sql语句优化

  • 选择多行时,使用 FETCH 或 OFFSET

OFFSET 参数用于标识从结果集中返回行的起点。基本上,它排除了第一组记录。

注意:

OFFSET 只能与 ORDER BY 子句一起使用。它不能单独使用。
偏移值必须大于或等于零。它不能为负数,否则返回错误。

FETCH 参数用于返回一组行数。FETCH本身不能使用,它与OFFSET一起使用。
语法:

    SELECT column_name(s)
    FROM table_name
    ORDER BY column_name
    OFFSET rows_to_skip
    FETCH NEXT number_of_rows ROWS ONLY;

连续执行许多 FETCH 语句的应用程序 可以通过对 n 行使用 FETCH 来改进。有了这个条款,你 可以用单个 FETCH 检索多行表数据,将 它们进入主机结构阵列或行存储区域。

使用 FETCH 语句的 SQL 应用程序,它没有 FOR n 行子句可以通过使用多行 FETCH 来改进 语句检索多行。主机结构数组之后 或行存储区域被 FETCH 填满,应用程序循环 通过数据,处理每一行。

声明 运行速度更快,因为 SQL 运行时只被调用一次 数据同时返回到应用程序。

您可以更改应用程序以允许数据库 管理器,用于阻止 SQL 运行时从 表。

在下表中,程序尝试 FETCH 100 行进入应用程序。请注意表中的差异 用于在以下情况下调用 SQL 运行时和数据库管理器的次数 可以执行阻止。

2 使用限制 LIMIT 子句

如果应用程序不打算检索整个结果 表,使用 LIMIT 子句可以提高性能。

查询优化器修改成本估算以检索子集 使用在 LIMIT 子句上指定的值的行数。

假设以下查询返回 100 行

SELECT EMPNO, LASTNAME, WORKDEPT
  FROM CORPDATA.EMPLOYEE
  WHERE WORKDEPT = 'A00'
  ORDER BY LASTNAME DESC limit 100 OFFSET 0
  • 多行写入优化

连续执行许多 INSERT 语句的应用程序, 可以通过使用插入 n 行来改进。

使用此子句,可以 将主机结构数组中的一行或多行数据插入到 目标表。

此数组必须是结构数组,其中 结构的元素对应于目标表中的列。

循环访问 INSERT 的 SQL 应用程序值 语句(不带 n ROWS 子句)可以通过使用 INSERT n ROWS 语句以在表中插入多行。

应用程序已循环以用行填充主机数组,单个 INSERT n ROWS 语句将整个数组插入到表中。

该语句运行得更快,因为仅调用了 SQL 运行时 一次,所有数据同时插入表。

如下,程序尝试插入 表中包含 100 个数据。

注意调用数的差异 到 SQL 运行时和数据库管理器(如果可以执行阻塞)。

               数据库管理器未使用阻塞        使用阻塞的数据库管理器
单行插入语句        100 次 SQL 运行时调用        100 个 SQL 运行时调用
                    100 次数据库 调用                一个数据库调用

多行插入语句       1 次 SQL 运行时调用           1 次 SQL 运行时调用
                           100 次数据库调用                1 次数据库调用

3 使用刷新交互,分页数据的更新方式

在大型表中,分页性能通常会降低 因为刷新(总是)参数在启动SQL(STRSQL)命令。

STRSQL 直接从表动态检索最新的 数据。

以交互方式显示数据时,
将 SELECT 语句的结果复制到临时表, 当您在显示屏上向前翻页时。

其他用户共享表可以在显示选择语句时更改行的结果。
如果向后或向前翻页到底 ,显示的行位于临时更新后的表。

可以在会话服务上更改刷新选项 显示。

4 提高并发性:避免锁定等待

管理并发访问解析选项定向数据库,如何处理某些隔离级别情况下的记录锁定冲突情况 。

并发访问解析(如果适用)可以 具有以下价值:

  • 等待结果(默认):

此过程定向数据库 管理器在遇到锁定时,比如等待提交或回滚正在更新或删除的数据。
锁定的行 正在插入的过程中也不会被跳过。
此选项 不适用于在隔离级别下运行的只读查询 无或未提交读取。

  • 使用当前已提交:

此过程允许数据库管理器将当前提交的数据版本用于只读。
在更新过程中遇到锁定数据时的查询或删除。可以跳过插入过程中的锁定行。

如果可能,当隔离级别有效时,此选项适用 游标稳定时,否则将被忽略,将跳过锁定的数据。

此值定向数据库管理器 在记录锁定冲突的情况下跳过行。
此选项是 仅当查询在隔离级别下运行时适用游标稳定性或读取稳定性,
另外用于UPDATE 和 DELETE 查询,以及当隔离级别为“无”或“未提交”时的读。

“使用当前提交”和“跳过锁定数据”的并发访问解析值,
是用于通过避免锁定等待来提高并发性。

但是,使用这些时必须小心,因为它们可能会影响应用程序功能。

此外,它们可以指定为 语句级别的并发访问解析子句,选择语句、选择进入、搜索更新或搜索删除 语句。

5 小结

不要害怕,一旦您了解了从哪里开始,优化关系数据库不一定是一项繁琐或艰巨的任务。

我们讨论了为什么数据库优化很重要,不同的性能优化技术,以及如何利用关系型数据库的特征使数据库运行得更快。

现在我们拥有诊断瓶颈和完善数据库所需的工具,并可以享受闪电般的数据库性能。
因此,让我们开始优化之旅吧。

目录
相关文章
|
7天前
|
关系型数据库 MySQL Serverless
探索PolarDB MySQL版:Serverless数据库的灵活性与性能
本文介绍了个人开发者对阿里云PolarDB MySQL版,特别是其Serverless特性的详细评测体验。评测涵盖了产品初体验、性能观测、Serverless特性深度评测及成本效益分析等方面。尽管试用过程中遇到一些小问题,但总体而言,PolarDB MySQL版表现出色,提供了高性能、高可用性和灵活的资源管理,是个人开发者和企业用户的优秀选择。
|
2天前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
2天前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与实践
随着微服务架构的普及,如何高效管理和优化数据库访问成为了关键挑战。本文探讨了在微服务环境中优化数据库访问的策略,包括数据库分片、缓存机制、异步处理等技术手段。通过深入分析实际案例和最佳实践,本文旨在为开发者提供实际可行的解决方案,以提升系统性能和可扩展性。
|
6天前
|
关系型数据库 MySQL 测试技术
《性能测试》读书笔记_数据库优化
《性能测试》读书笔记_数据库优化
20 7
|
9天前
|
SQL NoSQL Java
彻底革新你的数据库操作体验!Micronaut数据访问技巧让你瞬间爱上代码编写!
【9月更文挑战第10天】Java开发者们一直在寻找简化应用程序与数据库交互的方法。Micronaut作为一个现代框架,提供了多种工具和特性来提升数据访问效率。本文介绍如何使用Micronaut简化数据库操作,并提供具体示例代码。Micronaut支持JPA/Hibernate、SQL及NoSQL(如MongoDB),简化配置并无缝集成。通过定义带有`@Repository`注解的接口,可以实现Spring Data风格的命名查询。
25 6
|
10天前
|
前端开发 数据库
数据库表设计生成代码
BizWorks ToolKit插件集成Mybatis-Plus代码生成工具,支持从数据库表生成代码,便于研发过程中数据模型变更后的代码同步。本文介绍批量生成代码的方法、配置说明及项目示例。配置文件`*.mp.yaml`用于描述生成行为,可放置于`src/main/resource/bizworks/mybatis-plus/`路径下。配置包括数据库信息、输出目录及包名等。通过IDEA右键菜单即可启动代码生成。具体配置和示例详见文档。
20 2
|
13天前
|
SQL 关系型数据库 分布式数据库
PolarDB Proxy配置与优化:提升数据库访问效率
【9月更文挑战第6天】PolarDB是阿里云推出的高性能分布式关系型数据库,PolarDB Proxy作为其关键组件,位于客户端与PolarDB集群间,负责SQL请求的解析与转发,并支持连接池管理、SQL过滤及路由规则等功能。本文详细介绍了PolarDB Proxy的配置方法,包括连接池、负载均衡和SQL过滤设置,并探讨了监控调优、缓存及网络优化策略,以帮助提升数据库访问效率。
24 1
|
13天前
|
存储 关系型数据库 MySQL
如何优化数据库查询?
如何优化数据库查询?
31 1
|
6天前
|
存储 负载均衡 数据库
探索后端技术:从服务器架构到数据库优化的实践之旅
在当今数字化时代,后端技术作为支撑网站和应用运行的核心,扮演着至关重要的角色。本文将带领读者深入后端技术的两大关键领域——服务器架构和数据库优化,通过实践案例揭示其背后的原理与技巧。无论是对于初学者还是经验丰富的开发者,这篇文章都将提供宝贵的见解和实用的知识,帮助读者在后端开发的道路上更进一步。