网易首页 > 网易号 > 正文 申请入驻

使用变量对 SQL 进行优化

0
分享至

新手小伙伴平时可能比较少用到变量,其实变量在数据查询过程中经常使用到,而且可以有效提高查询速度。

什么是变量

变量其实就是我们定义的一个可变参数,其基本语法如下:

--定义一个名称为@I的变量,指定其类型为整数
DECLARE @I VARCHAR(20)
--对变量@I赋值为
SET @I='SQL数据库开发'
--输出@I的值
SELECT @I
结果:SQL数据库开发
  • 其中DECLARE @部分是固定写法,@I是变量名称,变量必须定义类型,一般会定义为字符型,整数型,时间类型等。
  • 赋值部分SET也是固定写法,就是对变量@I进行赋值,=右边的就是赋值内容了
  • 定义好变量后就可以将其带入到查询语句中了,每次只需要修改赋值部分,查询语句就会根据赋值内容查询出相应的结果

想了解变量的更多解释可以看我前面写的《SQL中的变量》

为什么要使用变量

使用变量后,相同的查询语句如果只是赋值不同,可以重复使用第一次的执行计划,做到一次解析,多次复用的效果,减少执行计划的解析就会相应提高查询速度了。我们看如下示例:

SELECT * FROM T1 WHERE ORDER_ID='112';
SELECT * FROM T1 WHERE ORDER_ID='113';

如果单独执行这两条查询语句,查询优化器认为是不同的SQL语句,需要解析两次。

我们使用变量对其进行修改

DECLARE @ORDER_ID VARCHAR(20)
SET @ORDER_ID='112'
SELECT * FROM T1 WHERE ORDER_ID=@ORDER_ID;

执行完之后,只需要修改@ORDER_ID的值为'113’,就可以重复使用上面的执行计划了。

由于上面的语句比较简单,可能看不出效果,但是如果遇到比较复杂的查询语句,变量查询往往能起到很好的效果。

什么时候该/不该使用变量

  • 常见的在线查询一遍都可以使用到变量,将变量作为参数传递给数据库,可以实现一次查询,重复使用执行计划。
  • 如果单独查询某个语句时间很久,比如超过半个小时了,这种使用变量没有什么明显的效果。

变量窥测

事物都存在两面性,变量对常见查询可以提高查询效率。但是也有例外,比如在WHERE条件中的字段是“倾斜字段”的时候。

倾斜字段”指该列中的绝大多数的值都是相同的,比如人口调查表,其中“民族”这列,90%以上都是汉族。那么如果一个SQL语句要查询30岁的汉族人口有多少,那“民族”这列必然要被放在WHERE条件中。这个时候如果采用绑定变量@NATION会存在很大问题。

如果@NATION传入的第一个值是“汉族”,那整个执行计划必然会选择表扫描。

DECLARE @NATION VARCHAR(50)
SET @NATION='汉族'
SELECT * FROM People WHERE AGE=30 AND NATION=@NATION;

当第二个值传入的是“畲族”,正常情况下“畲族”在表中占的比例可能只有万分之一,应该采用索引查找。

DECLARE @NATION VARCHAR(50)
SET @NATION='畲族'
SELECT * FROM People WHERE AGE=30 AND NATION=@NATION;

由于重用了第一次解析的“汉族”的那个执行计划,那么第二次也将采用表扫描方式。这个问题就是著名的“变量窥测”,建议对于“倾斜字段”不要采用绑定变量。

今天的内容讲到这里,如果对变量还有什么不明白的,可以在底下留言,我会一一回复的。

来源:https://mp.weixin.qq.com/s/Wh5WV1MkEnCYrtatSrB-ag

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
美腿:一种关于延伸的审美密码

美腿:一种关于延伸的审美密码

疾跑的小蜗牛
2026-02-24 19:22:27
冷空气暂时“避开”四川 厚衣服先别急着收起来

冷空气暂时“避开”四川 厚衣服先别急着收起来

封面新闻
2026-02-24 16:37:03
在刚刚,19家公司出现重大利好消息,看看有没有与你相关的个股?

在刚刚,19家公司出现重大利好消息,看看有没有与你相关的个股?

股市皆大事
2026-02-24 09:12:24
电饭煲按下去的那一刻,北方的面食时代就结束了

电饭煲按下去的那一刻,北方的面食时代就结束了

富贵说
2026-02-22 21:14:55
安佩姆参加海港训练!45号错过客战申花+泰山 球迷:黄瓜菜都凉了

安佩姆参加海港训练!45号错过客战申花+泰山 球迷:黄瓜菜都凉了

刀锋体育
2026-02-24 20:38:30
美专家:中国已提前准备好,火箭军首波次打击会让美空军“停飞”

美专家:中国已提前准备好,火箭军首波次打击会让美空军“停飞”

阿芒娱乐说
2026-02-24 19:54:53
杨丽萍被偶遇,纯素颜下巴叠出5层褶,原生指甲长又白看着很粗糙

杨丽萍被偶遇,纯素颜下巴叠出5层褶,原生指甲长又白看着很粗糙

陈意小可爱
2026-02-24 20:02:22
长安汽车宣布固态电池装车时间表 能量密度达400Wh/kg

长安汽车宣布固态电池装车时间表 能量密度达400Wh/kg

牛马科技
2026-02-24 20:21:42
确认了!今起全面影响浙江!持续到下月.....

确认了!今起全面影响浙江!持续到下月.....

舟山交通97
2026-02-24 11:40:35
侃爷夫妇:一个不穿鞋卖鞋,一个敢穿到出圈,画风绝了

侃爷夫妇:一个不穿鞋卖鞋,一个敢穿到出圈,画风绝了

述家娱记
2026-02-23 21:23:16
索尼之后,松下决定把欧美电视销售交给中国人

索尼之后,松下决定把欧美电视销售交给中国人

财通社
2026-02-24 20:15:38
吴艳妮小露性感腹肌迷人:普通的日子也会有说不清的快乐

吴艳妮小露性感腹肌迷人:普通的日子也会有说不清的快乐

懂球帝
2026-02-24 11:01:05
男子大扫除把旧冰箱卖了,母亲傍晚回家告诉他:冰箱里有现金、金银首饰、玉器挂件,“把家底卖了”

男子大扫除把旧冰箱卖了,母亲傍晚回家告诉他:冰箱里有现金、金银首饰、玉器挂件,“把家底卖了”

犀利强哥
2026-02-23 17:19:04
妈祖巡游后续反转,出乎所有人意料网传的事全错了,打了谁的脸?

妈祖巡游后续反转,出乎所有人意料网传的事全错了,打了谁的脸?

起喜电影
2026-02-23 22:34:03
当因杀死毒贩,而让半个国家燃起战火后,终于理解了墨西哥的绝望

当因杀死毒贩,而让半个国家燃起战火后,终于理解了墨西哥的绝望

阅微札记
2026-02-24 17:06:05
谷爱凌14岁就说自己是中国人:我不是老外 会不会说中文有打区别

谷爱凌14岁就说自己是中国人:我不是老外 会不会说中文有打区别

念洲
2026-02-24 16:34:24
A股:周二晚间传来3个特大级消息!A股或迎来更大级别大行情?

A股:周二晚间传来3个特大级消息!A股或迎来更大级别大行情?

股市皆大事
2026-02-24 16:11:35
84岁刘尚娴:在北京干休所养老,和丈夫生活简单儿子从事影视行业

84岁刘尚娴:在北京干休所养老,和丈夫生活简单儿子从事影视行业

查尔菲的笔记
2026-02-23 22:24:56
中国队夺冠奖金曝光!12人获重奖!李琰霸气表态:带队就要夺冠军

中国队夺冠奖金曝光!12人获重奖!李琰霸气表态:带队就要夺冠军

何老师呀
2026-02-24 07:04:26
18年前,揭露“三鹿奶粉”的上海记者简光洲,最后被报复了吗?

18年前,揭露“三鹿奶粉”的上海记者简光洲,最后被报复了吗?

毛豆何时归
2026-02-22 07:19:18
2026-02-24 21:04:49
互联网干货博主
互联网干货博主
我是专注分享互联网干货的博主
278文章数 1340关注度
往期回顾 全部

科技要闻

宇树科技发布四足机器人Unitree As2

头条要闻

20家日本实体被列入管制名单 中方:完全正当 合理合法

头条要闻

20家日本实体被列入管制名单 中方:完全正当 合理合法

体育要闻

苏翊鸣总结米兰征程:我仍是那个热爱单板滑雪的少年

娱乐要闻

汪小菲官宣三胎出生:承诺会照顾好3个孩子

财经要闻

县城消费「限时繁荣」了十天

汽车要闻

入门即满配 威兰达AIR版上市 13.78万元起

态度原创

旅游
本地
健康
艺术
公开课

旅游要闻

春节假期北京昌平区实现旅游总花费10.3亿元

本地新闻

春花齐放2026:《骏马奔腾迎新岁》

转头就晕的耳石症,能开车上班吗?

艺术要闻

2025年第八届全国青年美展 | 油画作品选刊

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版