数据库优化的目标无非是避免磁盘I/O瓶颈、减少CPU利用率和减少资源竞争。

查询优化规则:在访问数据库表的数据(Access Data)时,要尽可能避免排序(Sort)、连接(Join)和相关子查询*作。经验告诉我们,在优化查询时,必须做到: 
① 尽可能少的行; 
② 避免排序或为尽可能少的行排序,若要做大量数据排序,最好将相关数据放在临时表中*作;用简单的键(列)排序,如整型或短字符串排序; 
③ 避免表内的相关子查询; 
④ 避免在Where子句中使用复杂的表达式或非起始的子字符串、用长字符串连接; 
⑤ 在Where子句中多使用“与”(And)连接,少使用“或”(Or)连接; 
⑥ 利用临时数据库。在查询多表、有多个连接、查询复杂、数据要过滤时,可以建临时表(索引)以减少I/O。但缺点是增加了空间开销。 
除非每个列都有索引支持,否则在有连接的查询时分别找出两个动态索引,放在工作表中重新排序。

分割表或储存冗余数据 
分割表分为水平分割表和垂直分割表两种。分割表增加了维护数据完整性的代价。 
水平分割表:一种是当多个过程频繁访问数据表的不同行时,水平分割表,并消除新表中的冗余数据列;若个别过程要访问整个数据,则要用连接*作,这也无妨分 割表;典型案例是电信话单按月分割存放。另一种是当主要过程要重复访问部分行时,最好将被重复访问的这些行单独形成子集表(冗余储存),这在不考虑磁盘空 间开销时显得十分重要;但在分割表以后,增加了维护难度,要用触发器立即更新、或存储过程或应用代码批量更新,这也会增加额外的磁盘I/O开销。 
垂直分割表(不破坏第三范式),一种是当多个过程频繁访问表的不同列时,可将表垂直分成几个表,减少磁盘I/O(每行的数据列少,每页存的数据行就多,相 应占用的页就少),更新时不必考虑锁,没有冗余数据。缺点是要在插入或删除数据时要考虑数据的完整性,用存储过程维护。另一种是当主要过程反复访问部分列 时,最好将这部分被频繁访问的列数据单独存为一个子集表(冗余储存),这在不考虑磁盘空间开销时显得十分重要;但这增加了重叠列的维护难度,要用触发器立 即更新、或存储过程或应用代码批量更新,这也会增加额外的磁盘I/O开销。垂直分割表可以达到最大化利用Cache的目的。 
总之,为主要过程分割表的方法适用于:各个过程需要表的不联结的子集,各个过程需要表的子集,访问频率高的主要过程不需要整表。在主要的、频繁访问的主表需要表的子集而其它主要频繁访问的过程需要整表时则产生冗余子集表。 
注意,在分割表以后,要考虑重新建立索引。

数据库优化:优化查询相关推荐

  1. mysql数据库子查询的使用_MySQL数据库使用子查询方式更新数据优化及思考

    [环境介绍] 云数据库MySQL 5.7 [背景描述] 业务需要:需要对16370077的表数据进行更新部分数据操作 UPDATE P_MOXXXX_REXXXX SET FISAVAILABLE = ...

  2. 数据库优化——慢查询MySQL定位优化流程

    继前篇博文看了这么多,终于理解了MySQL索引之后,给大家再来一篇日常开发需要用到的优化技巧. 文章目录 1.如何定位并优化慢查询SQL? 2.如何使用慢查询日志? 3.慢查询例子演示,新手都能看懂 ...

  3. MySQL数据库性能优化由浅入深(表设计、慢查询、SQL索引优化、Explain分析、Show Profile分析、配置优化)

    文章目录 0 SQL性能分析 1 表的设计合理化 1.1 为什么需要范式 1.2 三范式原理 1.3 什么样的表才满足三范式 2 慢查询 2.1 慢查询介绍 2.2 慢查询步骤 3 添加适当索引 3. ...

  4. 进一寸有进一寸的欢喜,谈谈如何优化 Milvus 数据库的向量查询功能

    ✏️ 编者按 每年暑期,Milvus 社区都会携手中科院软件所,在「开源之夏」活动中为高校学生们准备丰富的工程项目,并安排导师答疑解惑.张煜旻同学在「开源之夏」活动中表现优秀,他相信进一寸有进一寸的欢 ...

  5. mysql数据库根据时间查询的优化

    今天 数据库单表查询,根据时间段进行查询,百万级数据量查询速度很慢,所以记录一下解决方法. 1.尽量避免thisTime > startTime and thisTime < endTim ...

  6. 历年双11实战经历者:我们是如何做数据库性能优化及运维-CloudDBA和天象

    8月24日阿里云数据库技术峰会上,阿里云高级DBA专家玄惭带来面对超大规模的数据库集群,尤其是在每年像双11这样重大促销活动中,阿里云是如何进行运维和优化的.本文主要介绍了天象和CloudDBA两个产 ...

  7. MySQL 数据库的优化,你知道有哪些?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | sf.gg/a/119000001863187 ...

  8. mysql 改表面_MySQL_解析MySQL数据库性能优化的六大技巧,数据库表表面上存在索引和防 - phpStudy...

    解析MySQL数据库性能优化的六大技巧 数据库表表面上存在索引和防错机制,然而一个简单的查询就会耗费很长时间.Web应用程序或许在开发环境中运行良好,但在产品环境中表现同样糟糕.如果你是个数据库管理员 ...

  9. 关于数据库SQL优化

    1.数据库访问优化 要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?而大多数情况性能最慢的设备会是瓶颈点,如下载时网络速度可能会是瓶颈点,本地复制文件时硬 ...

最新文章

  1. GDB attach到进程
  2. 昨天下午面了个哥们,也就问了4个问题,但好像他被我虐了
  3. call_user_fun()函数的使用
  4. Hilo开发H5小游戏踩坑笔记
  5. 2016年蓝桥杯省赛A组c++第8题(暴力求解)
  6. linux date命令设置时间
  7. 坐标转换 计算机图形学_计算机图形学的转换类型
  8. 在PS里怎样使图层居中对齐?
  9. 如何java面试_短时间如何过java面试?
  10. vscode的eslint无效_VSCode配置eslint
  11. vivo S9无法激活手机了vivoS9e怎么解锁平台刷机教程屏幕锁不记得了可以用这个方法教程重装系统固件软件S9手机如果已忘记密码可以自己学习升级降级USB操作了
  12. Java 泛型的实例化总结
  13. pdflatex和xelatex的使用差别和建议
  14. 酷家乐服务网格与Serverless落地情况
  15. Dynamo For Revit: 简单体量的创建
  16. C++ 算法 元素最大值和最小值
  17. Kepware通过网络配置三菱FX5U型号PLC的方法
  18. 7.20-7.22作业代码
  19. halcon calculate_lines_gauss_parameters算子详解
  20. chrome 浏览器开发者工具之网络面板

热门文章

  1. pythonxml读写_python xml读取和写入
  2. 华科团队发布 OVIS 遮挡视频实例分割基准数据集
  3. 羡慕,浙江大学的双 11 快递,全部由物流机器人配送
  4. 模拟数据解决二分类问题项目描述
  5. LeetCode 动态规划《简单》部分 Python实现
  6. Hadoop1.0.4单节点StandAlone及Pseudo-Distributed部署方法
  7. 这个世界上有一个故事,叫做《大话西游》。
  8. Java6和Java8在Windows上共存,(任意JDK共存,博主实现了789切换)
  9. 上海理工大学菜鸟驿站把无人车送进社区 协助解决抗疫物资“最后100米”配送...
  10. 华邦电子2022年1月营收为新台币86.90亿元