MySQL查询语句优化

 慢查询原因

1 从数据库请求不需要的数据

  • 例如业务只需要返回指定的列,sql查询全部列,或者多表关联返回全部列。
  • 某些相同数据被重查询多次,可以结合实际业务在初次查询后进行缓存,需要时候从缓存中取出

2 扫描额外的记录行

2 解决方法

1 扫描行数过多

如果发现查询需要扫描大量的数据但是只返回少量的行,那么可以尝试如下优化:

  • 使用索引覆盖扫描
  • 改变库表结构,例如使用单独的汇总表
  • 重写这个复杂查询也即重构该查询,让MySQL以更优化方式执行查询

2 重构查询方式

 主要提供几种优化数据库查询的思路,具体的改进还要结合业务进行定制化优化:

  • 一个复杂查询还是多个简单查询

网络通信、查询解析和优化的代价不是很高,所以有时候将一个大查询分解为多个小查询很有必要。实际中可以根据业务对实际两种查询的sql进行比对、衡量

  • 切分查询

例如定期删除大量数据时,如果用一个大的语句一次性完成的话,则可能需要一次锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞很多小的但重要的查询。所以可以通过将大的DELETE语句切分成多个较小的查询提高MySQL性能。

  • 分解关联查询

分解关联查询是指对每一个表进行一次单表查询,然后将结果在应用程序中进行关联。这样做的好处:

  1. 让缓存的效率更高,对于mysql来说,如果某个表很少发生变化,那么基于该表的查询就可以重复利用缓存结果
  2. 查询分解后,单个查询可以减少锁的竞争
  3. 在应用层做数据的关联,容易对数据库进行拆分,提高扩展性
  4. 减少冗余记录的查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python之装饰器详解

这几天翻看python语法,看到装饰器这里着实卡了一阵,最初认为也就是个函数指针的用法,但仔细研究后发现,不止这么简单。 首先很多资料将装饰器定义为AOP的范畴,也就是Aspect Oriented Programming面向切面编程的概念&am…

“睡服”面试官系列第十六篇之Symbol(建议收藏学习)

目录 1. 概述 2. 作为属性名的 Symbol 3. 实例:消除魔术字符串 4. 属性名的遍历 5. Symbol.for(),Symbol.keyFor() 6. 实例:模块的 Singleton 模式 7. 内置的 Symbol 值 7.1Symbol.hasInstance 7.2Symbol.isConcatSpreadable 7.3Sy…

POST请求传入中文参数,接收端乱码

问题描述&#xff1a;通过post请求调试短信接口发送出去后&#xff0c;客户端无法收到短信&#xff0c;中文内容乱码 追踪过程&#xff1a; 接口采用post请求进行&#xff0c;无法收取短信的接口代码如下&#xff1a; public static String sendPost(String url, Map<Stri…

LeetCode - Container With Most Water

题目&#xff1a; Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms…

TCP/IP协议模型

1. 数据链路层 作用(1) 实现网卡接口的网络驱动&#xff0c;以处理数据在以太网线等物理媒介上的传输   (2) 网络驱动程序隐藏了不同物理网络的不同电气特性&#xff0c;为上层协议提供一个统一的接口 应用ARP和RARP(Reverse Address Resolve Protocol)即逆地址解析协议&am…

【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

目录(?)[-] xml控件代码重用includexml控件代码重用merge横屏和竖屏landsacpe portraitxml控件代码重用&#xff1a;include 如果我们定义一个控件&#xff0c;需要在不同的layout中重复使用&#xff0c;或者在同一个layout中重复使用&#xff0c;可以采用include的方式。例如…

管理者一定会遇到的那些事

——极客时间——沈剑老师分享有感

Git使用攻略

Git使用攻略 merge&#xff0c;将develop合并到master# 切换到Master分支git checkout master# 将Develop分支合并到master git merge --no-ff develop 切换分支git checkout master 检出代码git checkout master 创建分支git branch newBranch查看本地分支git branch查看远程分…

Java停止线程的方式

1、使用中断标志位 public class StopThreadTest extends Thread {private boolean exit false;Overridepublic void run() {while (!exit) {try {System.out.println("i am running,please wait a moment");Thread.sleep(500);} catch (InterruptedException e) {…

Vim文本编辑器 指令簿(二)

常常处理文本以及常常须要写代码的人&#xff0c;都会有自己比較常常使用的编辑器&#xff0c;本人喜欢用Vim。理由就是Vim编辑器灵活&#xff0c;而且能够达到纯键盘操作&#xff0c;使用纯熟情况下&#xff0c;根本不须要鼠标操作。听起来是不是非常酷的&#xff1f;只是别高…

读《数学之美》

数学之美 数学的发展实际上是不断的抽象和概括的过程 目录 数学之美 第一章 第二章&#xff08;从规则到统计&#xff09; 第三章 统计语言模型 第四章 分词 第五章 隐马尔科夫模型 第六章 信息的度量和作用 第七章 贾里尼克和和现代语言处理 第八章 简单之美——布…

每天一个JavaScript实例-动态省份选择城市

<!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8" /> <title>每天一个JavaScript实例-动态省份选择城市</title> <script> var citystore new Array(); citys…

阅读源码那些事

方法 看spring的源码的时候如果我们一直追究所有的细节那会让我们会越陷越深&#xff0c;掉入细节的无底洞&#xff0c;稍不留神脑回路跟不上就会蒙圈。 因此&#xff0c;我们要学会找源码中的关键部分看&#xff0c;弄懂主要流程和本次看源码的目的的那部分就行。 等我们对…

Advanced C++ --- const function

上一篇介绍了const修饰的变量或者指针的含义&#xff0c;这篇我们介绍const修饰的函数以及函数参数含义。 首先我们看一个例子 class Dog{int age;string name; public:Dog(){age 3;name "dummy";}void setAge(const int &a){age a;a;} };int main(){Dog d;in…