相信现阶段依然有许多的企业信息化项目依然采用单体架构,其数据存储主要方式依然以关系型数据库为主,比如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. 外键查询_传统关系型数据库查询性能提高思路

    相信现阶段依然有许多的企业信息化项目依然采用单体架构,其数据存储主要方式依然以关系型数据库为主,比如oracle.mysql.postgresql等.企业初期,各种原因导致研发人员身兼数职,都是全栈的 ...

  2. MongoDB数据库查询性能提高40倍

    MongoDB数据库查询性能提高40倍 大家在使用 MongoDB 的时候有没有碰到过性能问题呢?下面这篇文章主要给大家分享了MongoDB数据库查询性能提高40倍的经历,需要的朋友可以参考借鉴,下面 ...

  3. mongodb 搜索速度_MongoDB数据库查询性能提高40倍的经历分享

    前言 数据库性能对软件整体性能有着至关重要的影响,本文给大家分享了一次MongoDB数据库查询性能提高40倍的经历,感兴趣的朋友们可以参考学习. 背景说明 1.数据库:MongoDB 2.数据集: A ...

  4. mysql获取查询策略语句_MySQL数据库查询性能优化策略

    优化查询 使用Explain语句分析查询语句 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 通过对查询语句的分析,可以了解查询语句的执行 ...

  5. 数据库查询性能优化之利器—索引(二)

    数据库查询性能优化之利器-索引(二) 在前面一篇文章中谈到适当地建立索引能够大幅度地提升SQL语句查询速度,然而并不是在什么情况下都适合建立索引,下面来谈一下什么情况下适合建立索引.建立什么样的索引以 ...

  6. es和传统关系型数据库的类比

    es和传统关系型数据库的类比 Ralational DB -> Databases -> Tables -> Rows           -> Columns Elastic ...

  7. 传统关系型数据库和NoSQL数据库有何区别?

    目录 一.传统关系型数据库和NoSQL数据库有何区别? 1.传统关系型数据库的技术特点 二.NoSQL的诞生是为了解决什么问题? 三.单机环境下运行数据库有哪些局限性? 1.单机读写数据的速度瓶颈问题 ...

  8. NoSQL 数据库和传统关系型数据库到底有什么区别?

    人们都会问,数据库到底有哪些不一样的关系 nosql数据库和传统关系库到底啥区别? 问题来自社区会员,回答来自社区交流,供同行参考 @zhuqibs Mcd 软件开发工程师: 长篇大论就不写了,就写几 ...

  9. 图数据库:从传统关系型数据库说起

    1.数据库 按照早期的数据库理论,比较流行的数据库模型有三种,分别为层次式数据库.网状数据库和关系型数据库.而在当今的互联网中,最常见的数据库模型主要是两种,即SQL关系型数据库和NoSQL非关系型数 ...

最新文章

  1. (转)一个as3写的减速效果
  2. 获取android屏幕大小
  3. 报错:TypeError: can‘t pickle _thread.RLock objects
  4. pl/sql中文显示为乱码解决
  5. 老张 .NetCore与Vue 框架学习
  6. ICCV 2019 | RankSRGAN:排序学习 + GAN 用于超分辨率
  7. CD(Continuous Deployment)实战问题之unable to read askpass解决
  8. 电影院开工在即,第一部电影就看他
  9. 数学4如何用计算机画正切函数图像,7.3.4正切函数的性质和图像
  10. cpu开机就是60℃_开机cpu温度60多度
  11. 如何用 Python 提取韦小宝身份证信息
  12. 解决使用ssh工具远程连接到服务器上因为网络波动而需要重连的问题
  13. Python中单引号,双引号,3个引号的用法
  14. UE4中的玩家类UPlayer、ULocalPlayer 和 UNetConnection
  15. 思思的美食笔记--吃哒【自用---随缘更】
  16. Linux下一些网络小技巧
  17. 6.PCIe协议分析3-PCIe TLP包详解2
  18. bootloader的功能介绍
  19. 我的世界java版怎么找史莱姆区块_我的世界史莱姆在哪里
  20. 关于ARM指令的英文全称(方便记忆|巧记汇编指令)

热门文章

  1. form表单标签的enctype属性的作用
  2. 367、POE交换机中1236和4578到底哪个供电?以及供电距离的选择
  3. 双目视觉 1 双目视觉的原理
  4. python处理Excel(1):报表结构转换处理各经联社收支明细表(支出项目汇总表)
  5. Go语言使用go-sciter创建桌面应用(一) 简单的通过html,css写ui
  6. Windows 10 Enterprise LTSB
  7. 22事务(TCL) ——MySQL
  8. [linux] shell 变量 字符串 数组
  9. 一、Jmeter下载+配置
  10. std::advance 给迭代器增加指定偏移量