sqlserver sql语句优化

news/发布时间2024/5/15 8:13:29
  1. 数据类型无需进行类型转换
-- 好(salary是flaot类型)
select emp_name from employee where salary>3000.0
-- 坏
select emp_name from employee where salary>3000

分析select emp_name form employee where salary > 3000 在此语句中若salary是Float类
型的,则优化器对其进行优化为Convert(float,3000),因为3000是个整数,我们应在编程时
使用3000.0而不要等运行时让DBMS进行转化。同样字符和整型数据的转换
2. 不要使用select *

-- 好
select emp_name tel from employee
-- 坏
select * from employee

使用select *的话会增加解析的时间,另外会把不需要的数据也给查询出来,数据传输也是
耗费时间的,
比如text类型的字段通常用来保存一些内容比较繁杂的东西,如果使用select *则会把该字段
也查询出来。
3.谨慎使用模糊查询

-- 好
select emp_name tel from employee where emp_name like 'paral%'
-- 坏
select * from employee where emp_name like '%paral%'

当模糊匹配以%开头时,该列索引将失效,若不以%开头,该列索引有效。
3. 应尽量避免在where子句中对字段进行函数操作

-- 好
select id from t where name like 'abc%'
select id from t where createdate>='2022-01-01' and createdate<='2022-
05-01'
-- 坏
select id from t where substring(name,1,3)='abc'
select id from t where datediff(day,createdate,'2022-05-01')=0

这将导致引擎放弃使用索引而进行全表扫描
4. 优先使用UNION ALL,避免使用UNION

-- 好
select name from student
union all
select name from teacher
-- 坏
select name from student
union
select name from teacher

UNION 因为会将各查询子集的记录做比较,故比起UNION ALL ,通常速度都会慢上许多。
一般来说,如果使用UNION ALL能满足要求的话,务必使用UNION ALL。还有一种情况,
如果业务上能够确保不会出现重复记录。
6.应尽量避免在 where 子句中对字段进行表达式操作

-- 好
select id from t where num=100*2
-- 坏
select id from where num/2=100

这将导致引擎放弃使用索引而进行全表扫描
7. 应尽量避免在 where 子句中对字段进行 null 值判断

-- 好
select id from t where num=0
-- 坏
select id from t where num is null

对字段进行 null 值判断,将导致引擎放弃使用索引而进行全表扫描。可以在建表时添加Not
Null 约束。
8.应尽量避免在 where 子句中使用 or 来连接条件

-- 好
select id from t where num=10
union all
select id from t where num=20
-- 坏
select id from t where num=10 or num=20

使用 or 来连接条件,将导致引擎放弃使用索引而进行全表扫描
9.很多时候用 exists 代替 in 是一个好的选择

-- 好
select num from a where exists(select 1 from b where num=a.num)
-- 坏
select num from a where num in (select num from b)
-- 好
select * from orders where customer_name not exists(select customer_name
from customer)
-- 坏
select * from orders where customer_name not in(select customer_name
from customer)

10.如果在 where 子句中使用参数,也会导致全表扫描

-- 好
select id from t with(index(索引名)) where num=@num
-- 坏
select id from t where num=@num

因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行
时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,
因而无法作为索引选择的输入项

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

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

相关文章

创新之巅 健康之选 森歌集成灶智能水洗新揭秘

2024年2月27日&#xff0c;一场引领智能厨电风潮的盛会在杭州隆重召开。森歌集成灶以“勠力同心 共生共歌”为主题&#xff0c;成功举办了2024森歌智能厨电优秀经销商峰会。此次峰会上&#xff0c;森歌集成灶发布了令人瞩目的奥运冠军同款智能厨电新品——森歌鲸洗小灶Z60&…

JavaWeb之 创建 Web项目,使用Tomcat 部署项目,使用 Maven 构建Web项目(一万八千字详解)

目录 前言3.1 Tomcat 简介3.1.1 什么是 Web服务器3.1.2 Tomcat 是什么3.1.3 小结 3.2 Tomcat 的基本使用3.2.1 下载 Tomcat3.2.2 安装 Tomcat3.2.3 卸载 Tomcat3.2.4 启动 Tomcat3.2.5 关闭 Tomcat3.2.6 配置 Tomcat3.2.7 在 Tomcat 中部署 Web项目 3.3 在 IDEA 中创建 Web 项目…

stm32——hal库学习笔记(IIC)

一、IIC总线协议介绍&#xff08;掌握&#xff09; 二、AT24C02介绍&#xff08;了解&#xff09; 三、AT24C02读写时序&#xff08;掌握&#xff09; 四、AT24C02驱动步骤&#xff08;掌握&#xff09; 五、编程实战&#xff08;掌握&#xff09; myiic.c #include "./B…

MATLAB环境下基于稀疏最大谐波噪声比反卷积的信号处理方法

状态监测与故障诊断是保障机械设备安全、稳定运行的基础。滚动轴承是旋转机械的核心部件&#xff0c;其服役性能直接影响整台设备的运行安全。在测试的振动信号中&#xff0c;周期性冲击是滚动轴承发生故障的重要标志。因此&#xff0c;如何从振动信号中提取出与故障相关的周期…

对el-table表格的表头操作

效果1&#xff1a;单层表头合并 图示1&#xff1a; 说明&#xff1a; header-cell-style函数用于给表头添加样式&#xff0c;其返回的值会被添加到表头对应样式中去注意函数的形参中的column.id为单元格的class类大家最好打印一下&#xff0c;结合审查dom看类名 代码&#x…

在VMware中安装CentOS 7并配置Docker

VMware安装CentOS 7 一、介绍 该文章介绍如何使用启动U盘在虚拟机里面安装系统&#xff0c;虚拟机版本为VMware Workstation 16 pro&#xff0c;Linux版本为CentOS Linux release 7.9.2009 (Core)。 二、安装 1、创建虚拟机 点击创建新的虚拟机 选择典型就可以了&#xf…

uniapp生成app包引导用户开启通知权限和热更新

uniapp生成app包引导用户开启通知权限和热更新 引导用户开启通知权限 export function setPermissions() {// #ifdef APP-PLUS if (plus.os.name Android) {var main plus.android.runtimeMainActivity();var pkName main.getPackageName();var uid main.getApplicationI…

React Vite 构建工具如何查看代码占用体积

首先安装 Vite 中的 rollup-plugin-visualizer 插件 cnpm install rollup-plugin-visualizer 接着在你的 vite.config.ts 中引入并且使用到 plugins 中 import { visualizer } from "rollup-plugin-visualizer";export default defineConfig({plugins: [react(),vi…

【k8s 访问控制--认证与鉴权】

1、身份认证与权限 前面我们在操作k8s的所有请求都是通过https的方式进行请求&#xff0c;通过REST协议操作我们的k8s接口&#xff0c;所以在k8s中有一套认证和鉴权的资源。 Kubenetes中提供了良好的多租户认证管理机制&#xff0c;如RBAC、ServiceAccount还有各种策路等。通…

最新IE跳转Edge浏览器解决办法(2024.2.29)

最新IE跳转Edge浏览器解决办法&#xff08;2024.2.29&#xff09; 1.前言2. 解决方案2.1.创建快捷方式2.2.效果 3. 遗留问题 1.前言 在前几天我发布过一个关于使用卸载补丁从而解决最新的IE跳转Edge浏览器的解决方案。   但是这个方案其实存在一个BUG&#xff0c;例如我昨天重…

【算法 - 动态规划】找零钱问题Ⅲ

在前面的动态规划系列文章中&#xff0c;关于如何对递归进行分析的四种基本模型都介绍完了&#xff0c;再来回顾一下&#xff1a; 从左到右模型 &#xff1a;arr[index ...] 从 index 之前的不用考虑&#xff0c;只考虑后面的该如何选择 。范围尝试模型 &#xff1a;思考 [L ,…

React入门之React_使用es5和es6语法渲染和添加class

React入门 //react的核心库 <script src"https://cdn.jsdelivr.net/npm/react17/umd/react.development.js"></script> //react操作dom的核心库&#xff0c;类似于jquery <script src"https://cdn.jsdelivr.net/npm/react-dom17/umd/react-dom.…

程序媛的mac修炼手册-- 2024如何彻底卸载Python

啊&#xff0c;前段时间因为想尝试chatgpt的API&#xff0c;需要先创建一个python虚拟环境来安装OpenAI Python library. 结果&#xff0c;不出意外的出意外了&#xff0c;安装好OpenAI Python library后&#xff0c;因为身份认证问题&#xff0c;根本就没有获取API key的权限…

Linux:进度条的实现

使用工具的简单介绍&#xff1a; 在创建进度条之前&#xff0c;首先要明白两个工具&#xff0c;fflush 和 \r 。 \r 回车键的功能其实是两个&#xff0c;一个是换行&#xff0c;一个是回车。所谓换行就是将光标从这一行变到下一行中&#xff0c;且是垂直下落&#xff0c…

CCF-A类 实时系统研究顶会RTSS‘24 5月23日截稿!引领技术新风暴!

会议之眼 快讯 第45届RTSS (IEEE Real-Time Systems Symposium)即实时系统研讨会将于 2024 年 12月10日 -13日在英国约克举行&#xff01;RTSS作为实时系统领域的首要盛会&#xff0c;为研究人员和从业人员提供了展示全方位创新的平台&#xff0c;涵盖了理论、设计、分析、实施…

1 数据分析概述与职业操守

1、 EDIT数字化模型 E——exploration探索 &#xff08;是什么&#xff09; 业务运行探索&#xff1a;探索关注企业各项业务的运行状态、各项指标是否合规以及各项业务的具体数据情况等。 指标体系——目标&#xff08;O&#xff09;、策略&#xff08;S&#xff09;、指标&a…

android开发书籍推荐,android面试复习

笼统来说&#xff0c;中年程序员容易被淘汰的原因其实不外乎三点。 1、输出能力已到顶点。这个人奋斗十来年了&#xff0c;依旧碌碌无为&#xff0c;很明显这人的天花板就这样了&#xff0c;说白了&#xff0c;天赋就这样。 2、适应能力越来越差。年纪大&#xff0c;有家庭&…

开工大吉,接单助你!

新年的气息逐渐散去&#xff0c;打工人重返岗位&#xff0c;开启新一年的搬砖&#xff01; 虽说&#xff0c;个个都叫嚷着“这个班是非上不可不可嘛&#xff1f;&#xff01;”但不少人新年的第一条朋友圈却是“开工大吉”。好吧&#xff0c; 在生活和金钱的威逼利诱下&#…

Python:练习:输出int值a占b的百分之几。例如:输入1和4,输出:25%。

案例&#xff1a; 输出int值a占b的百分之几。例如&#xff1a;输入1和4&#xff0c;输出&#xff1a;25%。 思考&#xff1a; 所有的一步步思考&#xff0c;最后综合起来。 首先&#xff0c;确定 输出&#xff0c;那么就用input&#xff0c;而且是int值&#xff0c;所以肯定…

【python】网络爬虫与信息提取--scrapy爬虫框架介绍

一、scrapy爬虫框架介绍 scrapy是一个功能强大的网络爬虫框架&#xff0c;是python非常优秀的第三方库&#xff0c;也是基于python实现网络爬虫的重要技术路线。scrapy不是哟个函数功能库&#xff0c;而是一个爬虫框架。 爬虫框架&#xff1a;是实现爬虫功能的一个软件结构和功…
推荐文章