传统关系型数据库查询性能提高思路
相信现阶段依然有许多的企业信息化项目依然采用单体架构,其数据存储主要方式依然以关系型数据库为主,比如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。这里推荐一种改善方案,在前端把查询字段明确化,去掉一个输入框接收查询参数。如果有技术力量,可以加上搜索引擎,则可以解决这个需求。
以上从数据库设计和查询两个方面简单阐述了如何提升查询性能。查询优化是一个研发团队的核心竞争力,在初创阶段,业务为王,技术是辅助性的。但是,技术也需要紧紧贴合业务,避免由于技术债务导致业务不能快速发展。应用性能提升之道任重而道远,欢迎交流。
传统关系型数据库查询性能提高思路相关推荐
- 外键查询_传统关系型数据库查询性能提高思路
相信现阶段依然有许多的企业信息化项目依然采用单体架构,其数据存储主要方式依然以关系型数据库为主,比如oracle.mysql.postgresql等.企业初期,各种原因导致研发人员身兼数职,都是全栈的 ...
- MongoDB数据库查询性能提高40倍
MongoDB数据库查询性能提高40倍 大家在使用 MongoDB 的时候有没有碰到过性能问题呢?下面这篇文章主要给大家分享了MongoDB数据库查询性能提高40倍的经历,需要的朋友可以参考借鉴,下面 ...
- mongodb 搜索速度_MongoDB数据库查询性能提高40倍的经历分享
前言 数据库性能对软件整体性能有着至关重要的影响,本文给大家分享了一次MongoDB数据库查询性能提高40倍的经历,感兴趣的朋友们可以参考学习. 背景说明 1.数据库:MongoDB 2.数据集: A ...
- mysql获取查询策略语句_MySQL数据库查询性能优化策略
优化查询 使用Explain语句分析查询语句 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 通过对查询语句的分析,可以了解查询语句的执行 ...
- 数据库查询性能优化之利器—索引(二)
数据库查询性能优化之利器-索引(二) 在前面一篇文章中谈到适当地建立索引能够大幅度地提升SQL语句查询速度,然而并不是在什么情况下都适合建立索引,下面来谈一下什么情况下适合建立索引.建立什么样的索引以 ...
- es和传统关系型数据库的类比
es和传统关系型数据库的类比 Ralational DB -> Databases -> Tables -> Rows -> Columns Elastic ...
- 传统关系型数据库和NoSQL数据库有何区别?
目录 一.传统关系型数据库和NoSQL数据库有何区别? 1.传统关系型数据库的技术特点 二.NoSQL的诞生是为了解决什么问题? 三.单机环境下运行数据库有哪些局限性? 1.单机读写数据的速度瓶颈问题 ...
- NoSQL 数据库和传统关系型数据库到底有什么区别?
人们都会问,数据库到底有哪些不一样的关系 nosql数据库和传统关系库到底啥区别? 问题来自社区会员,回答来自社区交流,供同行参考 @zhuqibs Mcd 软件开发工程师: 长篇大论就不写了,就写几 ...
- 图数据库:从传统关系型数据库说起
1.数据库 按照早期的数据库理论,比较流行的数据库模型有三种,分别为层次式数据库.网状数据库和关系型数据库.而在当今的互联网中,最常见的数据库模型主要是两种,即SQL关系型数据库和NoSQL非关系型数 ...
最新文章
- (转)一个as3写的减速效果
- 获取android屏幕大小
- 报错:TypeError: can‘t pickle _thread.RLock objects
- pl/sql中文显示为乱码解决
- 老张 .NetCore与Vue 框架学习
- ICCV 2019 | RankSRGAN:排序学习 + GAN 用于超分辨率
- CD(Continuous Deployment)实战问题之unable to read askpass解决
- 电影院开工在即,第一部电影就看他
- 数学4如何用计算机画正切函数图像,7.3.4正切函数的性质和图像
- cpu开机就是60℃_开机cpu温度60多度
- 如何用 Python 提取韦小宝身份证信息
- 解决使用ssh工具远程连接到服务器上因为网络波动而需要重连的问题
- Python中单引号,双引号,3个引号的用法
- UE4中的玩家类UPlayer、ULocalPlayer 和 UNetConnection
- 思思的美食笔记--吃哒【自用---随缘更】
- Linux下一些网络小技巧
- 6.PCIe协议分析3-PCIe TLP包详解2
- bootloader的功能介绍
- 我的世界java版怎么找史莱姆区块_我的世界史莱姆在哪里
- 关于ARM指令的英文全称(方便记忆|巧记汇编指令)
热门文章
- form表单标签的enctype属性的作用
- 367、POE交换机中1236和4578到底哪个供电?以及供电距离的选择
- 双目视觉 1 双目视觉的原理
- python处理Excel(1):报表结构转换处理各经联社收支明细表(支出项目汇总表)
- Go语言使用go-sciter创建桌面应用(一) 简单的通过html,css写ui
- Windows 10 Enterprise LTSB
- 22事务(TCL) ——MySQL
- [linux] shell 变量 字符串 数组
- 一、Jmeter下载+配置
- std::advance 给迭代器增加指定偏移量