SQL优化(代码层面)

news2024/11/13 0:18:31

1. 参数是子查询时,使用EXISTS代替IN

(1)如果连接列(id)上建立索引,那么查询B表时不用查实际的表,只需要查索引就可以了
(2)如果使用EXISTS,那么只要查到一行数据满足条件就会终止查询,不用像使用IN时一样扫描全表。在这一点上NOT EXISTS也是一样。

2. 参数是子查询时,使用连接代替IN

连接表至少能用到一张表的id列上的索引。而且因为没有子查询,也不会产生中间表。但如果连接没有用索引,可能EXISTS性能会更好

数据库首先会执行子查询,然后将结果存储在一张临时的工作表里(内联视图)接着再扫描整个视图

Oracle数据库中,如果使用建有索引的列,即使使用IN也会先扫描索引
PostgreSQL从版本7.4起也改善了使用子查询作为IN谓词参数时的查询速度。

3.避免排序

具有代表性的排序运算:

  • GROUP BY
  • ORDER BY
  • 聚合函数(SUM,COUNT,AVG,MAX,MIN)
  • DISTINCT
  • 集合运算符(UNION,INTERECT,EXCEPT)
  • 窗口函数(RANK,ROW_NUMBER等)

(1)灵活使用集合运算符的ALL可选项
union ALL 因为不用排除重复数据,所以也不需要进行排序
(2)使用EXISTS代替DISTINCT
exists不进行排序且不做全表扫描
(3)在极值函数中使用索引(MAX|MIN)
不是去掉排序而是优化排序前的查找速度
(4)能写在where子句里的条件不要写在having子句里
①GROUP BY子句聚合时会进行排序或者散列运算,先在where中筛选出来一部分数据,减轻负担
②在where字句中可以用到索引。having是针对聚合后生成的视图进行筛选,大多数情况下聚合后的视图并没有继承原表的索引

4.是否用列索引

(1)索引列运算
在索引列上做+,-,*,/运算会导致索引失效

select * from semoTable where col1*1.1 > 100; ×
select * from someTable where col1>100/1.1;

(2)索引失效的场景
①用IS NULL或IS NOT NULL
②<>, !=, NOT IN
③使用OR
(3)最左匹配
存在联合索引col1,col2,col3(√标识使用到索引,×标识没有用到索引)

select * from table where col1=10 and col2=100 and col3=200;select * from table where col1=10 and col2=100;select * form table where col1=10 and col3=200; ×
select * from table where col2=100 and col3=200; ×

最左匹配原则:联合索引的第一列必须写在查询条件的开头,并且索引中列的顺序不能颠倒

使用like,只有前方一致的匹配才能用到索引

select * from table where col1 like 'x%';

5.类型转换

默认的类型转换不仅会增加额外的性能开销,还会导致索引不可用

select * from table where col1=CAST(10,AS CHAR(2))

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

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

相关文章

一文理解AXI4-lite与AXI4-stream协议

AXI4-lite与AXI4-stream协议 上篇博文《AMBA3.0 AXI总线入门》浅要介绍AXI4总线协议&#xff0c;AXI总线作为一种总线&#xff0c;可以挂载多个主设备&#xff08;master&#xff09;和从设备&#xff08;slave&#xff09;&#xff0c;AXI总线协议定义了主设备和从设备之间如何…

Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 前言 本文主要分享如何在群晖NAS本地部署并运行一个基于大语言模型Llama 2的个人本地聊天机器人并结合内网穿透工具…

Web安全-SQL注入之联合查询注入

声明 环境 墨者学院-SQL手工注入漏洞测试(MySQL数据库-字符型) 判断是否存在漏洞 http://124.70.64.48:42937/new_list.php?idtingjigonggao and 12-- and 11正常 http://124.70.64.48:42937/new_list.php?idtingjigonggao and 12-- and 12出错&#xff0c;存在字符型注入…

yolov8训练数据集——labelme的json文件转txt文件

yolov8的环境搭建&#xff0c;参考&#xff1a;Home - Ultralytics YOLO Docs 1.把标注好的json文件和jpg放同一个目录下。 2.运行转换脚本文件labelme2yolo.py文件&#xff1a; # -*- coding: utf-8 -*-import os import numpy as np import json from glob import glob im…

python学习笔记(3)——控制语句

控制语句 我们在前面学习的过程中&#xff0c;都是很短的示例代码&#xff0c;没有进行复杂的操作。现在&#xff0c;我们将开始学习流程控制语句。 前面学习的变量、数据类型&#xff08;整数、浮点数、布尔&#xff09;、序列&#xff08;字符串、列表、元组、字 典、集合&am…

GPS在Linux下的使用(war driving的前置学习)

1.ls /dev/tty* 列出所有与 tty 相关的设备文件。这些设备文件通常对应终端设备 ttyUSB0是GPS端口 2.cat /dev/ttyUSB0 用于读取并显示连接到 /dev/ttyUSB0 串口设备发送的原始数据 这种是GPS定位不全的&#xff0c;要拿到更开阔的地方 这种是GPS定位全的 因为会持续输出…

大模型神书《HuggingFace自然语言处理详解——基于BERT中文模型的任务实战》读完少走几年弯路!

这几年&#xff0c;自然语言处理&#xff08;NLP&#xff09;绝对是机器学习领域最火的方向。那么今天给大家带来一本 《HuggingFace自然语言处理详解——基于BERT中文模型的任务实战》 这本大模型书籍资料已经上传CSDN&#xff0c;朋友们如果需要可以微信扫描下方CSDN官方认证…

MoveIt控制机械臂的运动实现——机器人抓取系统基础系列(二)

文章目录 概要1 用户接口和代码案例2 不同的规划类型2.1 关节空间规划2.2 工作空间规划2.3 笛卡尔空间规划 3 MoveIt运行实操4 相关资料推荐小结 概要 MoveIt为开发者提供了针对机械臂的集成化开发平台&#xff0c;由一系列操作相关的功能包组成&#xff0c;包括运动规划、操作…

一、人物朝向摄像机移动

一、导入插件Cinemachine 重命名为ThirdPersonCamera Follow和LookAt 选择为player 镜像Y轴&#xff0c;取消X轴 摄像机绑定模式为World Space 二、挂载代码PlayerController using System.Collections; using System.Collections.Generic; using UnityEngine;public class…

查询最近正在执行的sql(DM8 : 达梦数据库)

查询最近正在执行的sql DM8 : 达梦数据库 1 查询最近正在执行的sql2 更多达梦数据库学习使用列表 1 查询最近正在执行的sql 迁移数据时 , 业务无响应 , 查看最近活动的sql , 有没有迁移相关的表 , 通过最后的时间字段 , 判断会话是否正在执行 SELECT SESS_ID, SQL_TEXT, STATE…

三条命令实现linux内核升级

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm 如果报&#xff1a;curl: (35) Peer reports incompatible or unsupported protocol version. 执行命令&#xff1a; yum update -y nss curl libcurl 2.yum --enablerepoelrepo-kernel install …

iOS六大设计原则设计模式

六大设计原则&#xff1a; 一、单一职责原则 一个类或者模块只负责完成一个职责或者功能。 类似于&#xff1a;UIView 和 CALayer 二、开放封闭原则 对扩展开放&#xff0c;对修改封闭。 我们要尽量通过扩展软件实体来解决需求变化&#xff0c;而不是通过修改已有的代码来…

Redis主从集群搭建

一、什么是主从复制 主从复制&#xff0c;是指将一台redis服务的数据复制到集群中其他的redis服务&#xff0c;前者称(Maste)&#xff0c;后者称(Slave)&#xff1b;数据的复制是单向的&#xff0c;只能从主节点复制到从节点&#xff0c;一个主节点可以有多个从节点&#xff0…

【CubeMX学习笔记】关于CAN通信协议

目录 一、CAN通信简介 二、CAN数据帧类型 三、格式帧 四、位同步 传输数据时可能遇到的问题 最小时间单位 硬同步 再同步 波特率的计算 STM32中的CAN外设 一、原理图 二、标识符筛选 三、配置单个邮箱&#xff08;正常模式或自发自收只需要修改模式&#xff09; …

探索 ShellGPT:终端中的 AI 助手

文章目录 探索 ShellGPT&#xff1a;终端中的 AI 助手背景介绍ShellGPT 是什么&#xff1f;如何安装 ShellGPT&#xff1f;简单的库函数使用方法场景应用常见问题及解决方案总结 探索 ShellGPT&#xff1a;终端中的 AI 助手 背景介绍 在当今快速发展的技术领域&#xff0c;命…

人体动捕相关算法

SMPL、SMPLify SMPL&#xff08;Skinned Multi-Person Linear (SMPL) Model&#xff09;Keep it SMPL: Automatic Estimation of 3D Human Pose and Shape from a Single Image&#xff0c;2015 SMPL 关节点数量&#xff1a;K23&#xff0c;其中0号节点&#xff08;不在K之…

一区黏菌算法+双向深度学习+注意力机制!SMA-BiTCN-BiGRU-Attention黏菌算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测

一区黏菌算法双向深度学习注意力机制&#xff01;SMA-BiTCN-BiGRU-Attention黏菌算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测 目录 一区黏菌算法双向深度学习注意力机制&#xff01;SMA-BiTCN-BiGRU-Attention黏菌算法优化双向时间卷积双向门控循环单元…

keil的debug功能

文章目录 一.窗口介绍二.功能2.1 debug断点调试和窗口变量2.2 四个花括号功能2.2.1 进去函数和下一步功能2.2.2 跳过函数和跳过该行代码功能2.2.3 函数内部跳出功能2.2.4 执行到光标处 2.3 查看内部寄存器 一.窗口介绍 二.功能 2.1 debug断点调试和窗口变量 先打开下图debug断…

Scanner流程控制语句

1. Scanner类 Scanner的意思是扫描 Scanner是JDK提供的一个类&#xff0c;位于java.util包下&#xff0c;所以我们如果需要使用则必须导包&#xff0c;导包的语句必须在声明包之后&#xff0c;在声明类之前 Scanner类是用来接受用户输入的各种信息 Scanner类提供了用于接受…

Ubuntu中交叉编译armdillo库

网上关于交叉编译armdillo库比较少&#xff0c;借鉴了一些但是在前几天编译时总是磕磕绊绊&#xff0c;于是写一个详细的编译过程。 交叉编译armdillo库包含两个步骤&#xff1a;交叉编译依赖库和交叉编译armdillo库。armdillo官网介绍依赖库如下图所示&#xff1a; 需要注意如…