传统关系型数据库查询性能提高思路

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 传统关系型数据库查询性能提高思路

相信现阶段依然有许多的企业信息化项目依然采用单体架构,其数据存储主要方式依然以关系型数据库为主,比如oracle、mysql、postgresql等。企业初期,各种原因导致研发人员身兼数职,都是全栈的角色。当然从业务上来说,用户量不大,并发数小,只要实现需求功能就可以了。当系统运行到一定数量级,一定会面临数据库的查询问题。下文从数据库设计和查询简单说说怎么提高查询性能。


一、数据库设计


1、使用范式设计合理设计数据库,为了考虑性能,可不用实现全部范式。在实践中使用第一和第二范式即可(具体范式规则可问度娘)。


2、表字段使用合理的数据类型,尽量不用blob、clob、text等大字段,如必须使用,可增加扩展表,从需求上,这些大字段在列表查询时不用展示,在展示详情时再发起查询即可。对于图片和视频等,只保存路径信息,实际文件保存在文件系统中。


3、在条件查询字段增加索引,索引是传统模式下,性能提升的利器。在不增加任何硬件的前提下,索引可以大大的提高应用查询效率。


4、数据库端不做任何外键,在应用端负责外键引用。这里需要注意的是,有A(id),B(id,aid),设计这种表的时候一定要注意关联字段的数据类型必须要一致。A表中id字段是int8,那么B表中aid字段就必须设置为int8,而不能用varchar字段。


二、查询优化


1、使用exists替代in。


开发人员由于不考虑数据查询效率,使用exists可以使用表索引,从而提升效率。当前前提是exists的结果集是一个大结果集。如果目标结果集只是几十条数据,使用in也是可以的。


2、尽量少用子查询。


子查询的性能很低,建议使用表连接的方式来优化。


3、优化or查询。


实际开发中or查询常见,可以通过union中改变or为两条and语句来提高查询效率。


4、不滥用多字段like。


业务方喜欢在前端页面使用一个输入框实现多字段检索。实现方式通常是多字段or加like。这里推荐一种改善方案,在前端把查询字段明确化,去掉一个输入框接收查询参数。如果有技术力量,可以加上搜索引擎,则可以解决这个需求。

三、应用程序优化

1、在应用程序中采用合理的数据结构来存储相应的查询结果数据。


2、在业务逻辑层中尽量加快运算,较少不必要的时间消耗,比如多次进行集合的遍历。


以上从数据库设计和查询两个方面简单阐述了如何提升查询性能。查询优化是一个研发团队的核心竞争力,在初创阶段,业务为王,技术是辅助性的。但是,技术也需要紧紧贴合业务,避免由于技术债务导致业务不能快速发展。应用性能提升之道任重而道远,欢迎交流。


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
1月前
|
XML Java 数据库连接
性能提升秘籍:如何高效使用Java连接池管理数据库连接
在Java应用中,数据库连接管理至关重要。随着访问量增加,频繁创建和关闭连接会影响性能。为此,Java连接池技术应运而生,如HikariCP。本文通过代码示例介绍如何引入HikariCP依赖、配置连接池参数及使用连接池高效管理数据库连接,提升系统性能。
60 5
|
24天前
|
关系型数据库 Serverless 分布式数据库
扩缩容操作对PolarDB Serverless的性能有多大影响?
PolarDB Serverless 的扩缩容操作对性能会产生一定的影响,但通过合理的规划、监测和措施,可以将这种影响控制在较小的范围内。同时,随着技术的不断进步和优化,扩缩容操作对性能的影响也会逐渐减小,为用户提供更稳定、高效的数据库服务体验。
|
18天前
|
存储 缓存 网络协议
数据库执行查询请求的过程?
客户端发起TCP连接请求,服务端通过连接器验证主机信息、用户名及密码,验证通过后创建专用进程处理交互。服务端进程缓存以减少创建和销毁线程的开销。后续步骤包括缓存查询(8.0版后移除)、语法解析、查询优化及存储引擎调用,最终返回查询结果。
26 6
|
24天前
|
监控 关系型数据库 Serverless
扩缩容操作对 PolarDB Serverless 性能的影响
扩缩容操作对 PolarDB Serverless 性能的影响
22 3
|
27天前
|
关系型数据库 分布式数据库 数据库
PolarDB 以其出色的性能和可扩展性,成为大数据分析的重要工具
在数字化时代,企业面对海量数据的挑战,PolarDB 以其出色的性能和可扩展性,成为大数据分析的重要工具。它不仅支持高速数据读写,还通过数据分区、索引优化等策略提升分析效率,适用于电商、金融等多个行业,助力企业精准决策。
34 4
|
17天前
|
SQL JavaScript 程序员
数据库LIKE查询屡试不爽?揭秘大多数人都忽视的秘密操作符!
本文分析了因数据库中的不可见空白字符导致的数据查询问题,探讨了问题的成因与特性,并提出了使用 SQL 语句修复问题的有效方案。同时,总结了避免类似问题的经验和注意事项。
27 0
|
1月前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
37 2
|
1月前
|
存储 缓存 关系型数据库
怎么让数据库查询更快
【10月更文挑战第25天】通过以上综合的方法,可以有效地提高数据库查询的速度,提升应用程序的性能和响应速度。但在优化过程中,需要根据具体的数据库系统、应用场景和数据特点进行合理的调整和测试,以找到最适合的优化方案。
|
1月前
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
80 1
|
1月前
|
监控 关系型数据库 MySQL
如何监控和诊断 MySQL 数据库的性能问题?
【10月更文挑战第28天】监控和诊断MySQL数据库的性能问题是确保数据库高效稳定运行的关键
148 1