【日积月累】sql执行语句优化

news2024/11/16 11:52:13

目录

sql执行语句优化

  • 1.前言
  • 2.sql执行语句优化
  • 2.1语句注意类
    • 1.避免使用 * 查询(全表查询)
    • 2.限制查询返回数
    • 3.小数据集驱动大数据集
    • 4.group by 优化
    • 5.尽量使用数值替代字符串类型
    • 6.使用varchar代替char
    • 7.批量插入性能提升
  • 3.误操作导致索引失效
    • 1.避免查询条件字符串没有加''
    • 2.避免使用!=或<>
    • 3.避免在where自句中使用or来链接条件
    • 4.一次sql最好只请求一张表,减少子查询多表查询的情况
  • 4.参考


文章所属专区 超链接


1.前言

2.sql执行语句优化

2.1语句注意类

1.避免使用 * 查询(全表查询)

在实际业务场景中我们往往需要的不是一张表的全部字段,而是部分字段,写清楚需要查询的字段。
1.这种方式性能开销非常大,查询的数据量大,通过网络传输时,也会增加数据传输的时间,
2.会让优化器无法完成索引覆盖扫描这类优化。

2.限制查询返回数

查询语句尽量

select id, create_date 
from order 
where user_id=123 
order by create_date asc 
limit 1;

3.小数据集驱动大数据集

1.in sql语句包含了in关键字,会优先执行里面的子查询语句,再执行in外面的语句。因此in关键字适合左边大表,右边小表的情况。

select * from order
where user_id in (select id from user where status=1)

2.exists sql语句包含了exists关键字,会优先执行exists左边的语句,然后把它跟右边的语句匹配,如果匹配上就查询出数据,如果匹配不上,数据就被过滤掉了。因此exist适合左边小表,右边大表的情况。

select * from order
where exists (select 1 from user where order.user_id = user.id and status=1)

4.group by 优化

SELECT age,COUNT(1) FROM student GROUP BY age HAVING age > 20

使用group by 分组查询时,可以先缩小查询范围。

SELECT age,COUNT(1) FROM student where age > 20 GROUP BY age 

5.尽量使用数值替代字符串类型

primary key优先使用数值类型int,tinyint
因为引擎在处理查询和连接时会逐个比较字符串中每一个字符;
而对于数字型而言只需要比较一次就够了;
字符会降低查询和连接的性能,并会增加存储开销。

6.使用varchar代替char

varchar变长字段按数据内容实际长度存储,存储空间小,可以节省存储空间;
char按声明大小存储,不足补空格;
其次对于查询来说,在一个相对较小的字段内搜索,效率更高;

7.批量插入性能提升

避免for循环多次插入的情况,导致每条都需要事务开启和事务提交

INSERT INTO user (id,username) VALUES(1,'编程');

INSERT INTO user (id,username) VALUES(2,'妲己');

替代为

INSERT INTO user (id,username) VALUES(1,'编程'),(2,'妲己');

3.误操作导致索引失效

1.避免查询条件字符串没有加’’

会导致索引失效,从而全表扫描
如果 SELECT * FROM student WHERE id_card = 5040198345 id_card 没有加单引号 会导致索引失效。

SELECT * FROM student WHERE id_card = '5040198345'

2.避免使用!=或<>

会导致索引失效,从而全表扫描

SELECT * FROM student WHERE id_card != '123'

3.避免在where自句中使用or来链接条件

使用or可能会使索引失效,从而全表扫描;

4.一次sql最好只请求一张表,减少子查询多表查询的情况

4.参考

掌握这12个SQL优化方法,你基本上就无敌了
SQL优化篇:如何成为一位写优质SQL语句的绝顶高手!
浅谈SQL优化小技巧
15个常用的sql优化技巧

给个三连吧 谢谢谢谢谢谢了
在这里插入图片描述

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

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

相关文章

JVS低代码和智能BI(自助式数据分析)12.19更新功能说明

低代码更新功能 新增: 1、表单组件&#xff1a;标题、分割线、按钮等非数据组件增加小程序端隐藏设置&#xff1b; 隐藏设置允许开发者对表单组件中的非数据组件进行隐藏&#xff0c;例如&#xff0c;可能只想展示表单的部分内容&#xff0c;或者希望在特定条件下显示或隐藏…

HarmonyOS应用开发实战—开箱即用的应用首页页面【ArkTS】【鸿蒙专栏-34】

一.HarmonyOS应用开发实战—开箱即用的应用首页页面【ArkTS】【鸿蒙专栏-34】 1.1 项目背景 HarmonyOS(鸿蒙操作系统)是华为公司推出的一种分布式操作系统。它被设计为一种全场景、全连接的操作系统,旨在实现在各种设备之间的无缝协同和共享,包括智能手机、平板电脑、智能…

HamronyOS 自动化测试框架使用指南

概述 为支撑 HarmonyOS 操作系统的自动化测试活动开展&#xff0c;我们提供了支持 JS/TS 语言的单元及 UI 测试框架&#xff0c;支持开发者针对应用接口进行单元测试&#xff0c;并且可基于 UI 操作进行 UI 自动化脚本的编写。 本指南重点介绍自动化测试框架的主要功能&#x…

grafana基本使用

一、安装grafana 1.下载 官网下载地址&#xff1a; https://grafana.com/grafana/download官网包的下载地址&#xff1a; yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-10.2.2-1.x86_64.rpm官网下载速度非常慢&#xff0c;这里选择清华大…

【单调栈】LeetCode1776:车队

作者推荐 【贪心算法】【中位贪心】.执行操作使频率分数最大 涉及知识点 单调栈 题目 在一条单车道上有 n 辆车&#xff0c;它们朝着同样的方向行驶。给你一个长度为 n 的数组 cars &#xff0c;其中 cars[i] [positioni, speedi] &#xff0c;它表示&#xff1a; positi…

markdown文档主题颜色修改

目录 1、选择任意想选择的markdown文档主题css文件&#xff1a; 2、修改背景颜色 1、选择任意想选择的markdown文档主题css文件&#xff1a; 使用工具Typora文件主题路径&#xff1a; C:\Users\AppData\Roaming\Typora\themes&#xff0c;此处我这边就是copy了xydark的css文…

【LeetCode刷题笔记(8-2)】【Python】【接雨水】【单调栈】【困难】

文章目录 引言接雨水题目描述提示 解决方案2&#xff1a;【单调栈】结束语 【接雨水】 【LeetCode刷题笔记&#xff08;8-1&#xff09;】【Python】【接雨水】【动态规划】【困难】 引言 编写通过所有测试案例的代码并不简单&#xff0c;通常需要深思熟虑和理性分析。虽然这…

总线地址/物理地址/虚拟地址

参考&#xff1a; 总线地址、物理地址、虚拟地址-CSDN博客 内存管理&#xff1a;物理地址、虚拟地址、逻辑地址_虚拟地址和物理地址-CSDN博客 总线地址 总线地址和地址总线是一个概念。地址总线 (Address Bus&#xff1b;又称&#xff1a;位址总线) 属于一种电脑总线 &#xf…

React和umi搭建项目的操作步骤

​​​​​​一、react脚手架新建项目 (1.1)、命令行 前提&#xff1a;react ES2015,nodejs v8 npx create-react-app myReactName //2022年v16以下版本 myReactName(自定义项目名) react中文官网&#xff0c;快速上手&#xff1a;react中文官网 react框架&#xff0c;…

Linux系统中查看路由表的命令(ip route)

以下命令是在Linux系统中查看路由表的命令&#xff1a; 在Linux系统中&#xff0c;有多种方法可以查看路由设置。以下是一些常用的命令&#xff1a; ip route 或 ip -4 route&#xff08;IPv4&#xff09;/ ip -6 route&#xff08;IPv6&#xff09;&#xff1a; 这是最常用且功…

算法设计与分析期末知识点总结

一、概论 1、算法设计的目标&#xff1a; &#xff08;1&#xff09;正确性 &#xff08;2&#xff09;可使用性&#xff08;用户友好性&#xff09; &#xff08;3&#xff09;可读性 &#xff08;4&#xff09;健壮性 &#xff08;5&#xff09;高效率与低存储量需求 算…

vue 快速入门+vite前端构建工具

四、Vue3简介和快速体验 4.1 Vue3介绍 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简…

迪文屏开发保姆级教程——页面键盘

迪文屏页面键盘保姆级教程。 本篇文章主要介绍了在DGBUS平台上使用页面键盘的步骤。 文章目录 一、前言 开发环境 二、使用步骤 1.准备素材 2.打开DGUS工程&#xff0c;导入素材。 3.生成ICL文件。 4.添加数据变量显示控件 5.添加数据录入控件 A.变量地址设置 B.变量类…

外媒发稿最好的宣传方法是什么?大舍传媒

外媒发稿最好的宣传方法是什么&#xff1f; 引言 在如今信息爆炸的时代&#xff0c;外媒发稿的宣传方法至关重要。大舍传媒作为一家业内知名的传媒公司&#xff0c;积累了丰富的经验和成功案例。本文将探讨外媒发稿最好的宣传方法&#xff0c;旨在帮助读者更好地推广自己的信…

将输入的文本包装成多个行使每行的字符数不超过指定的列宽textwrap.fill()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将输入的文本包装成多个行 使每行的字符数不超过指定的列宽 textwrap.fill() [太阳]选择题 请问以下代码每行最多能输出字符数是&#xff1f; import textwrap text "This is a long …

(PC+WAP)装修设计公司网站模板 家装公司网站源码下载

(PCWAP)装修设计公司网站模板 家装公司网站源码下载 PbootCMS内核开发的网站模板&#xff0c;该模板适用于装修设计、家装公司类等企业&#xff0c;当然其他行业也可以做&#xff0c;只需要把文字图片换成其他行业的即可&#xff1b; PCWAP&#xff0c;同一个后台&#xff0c…

【Redis】四、Redis.conf详解

文章目录 Redis.conf详解单位网络通用 GENERAL快照REPLICATION 复制SECURITY 安全限制 CLIENTSAPPEND ONLY 模式 aof配置 Redis.conf详解 启动的时候&#xff0c;就通过配置文件来启动&#xff01; 工作中&#xff0c;一些小小的配置&#xff0c;可以让你脱颖而出&#xff01;…

多域名证书和通配符证书的区别?

先来说说多域名证书&#xff08;别急&#xff0c;通配符证书&#xff0c;马上就有戏&#xff09;。多域名证书&#xff0c;正式的名字叫主题备用名称&#xff08;SAN&#xff09;证书。想象一下&#xff0c;它们就像是一个超级英雄联盟&#xff0c;能在一个SSl证书下保护包含不…

《Linux C编程实战》笔记:进程操作之退出,执行,等待

进程退出 进程退出表示进程即将运行结束。在Linux中退出分为正常退出和异常退出。 正常退出&#xff1a; 在main函数中执行return调用exit函数调用_exit函数 异常退出&#xff1a; 调用abort函数收到某个信号&#xff0c;这个信号是程序终止 退出方式比较 exit和return的…

「Verilog学习笔记」游戏机计费程序

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule game_count(input rst_n, //异位复位信号&#xff0c;低电平有效input clk, //时钟信号input [9:0]money,input set,input boost,output reg[9:0…