我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQLServer如何使用UNION代替OR提升查询性能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQLServer如何使用UNION代替OR提升查询性能

这篇文章主要介绍SQLServer如何使用UNION代替OR提升查询性能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

  SQLServer数据库查询的过程中,通过对SQL语句的优化来提高SQL查询的性能。下面亿速云小编来讲解下SQLServer怎么使用UNION代替OR提升查询性能?

  SQLServer怎么使用UNION代替OR提升查询性能

  SQL>settimingonSQL>setautotraceonSQL>selectcount(*)rowcount_lhy2fromswgl_ddjbxxt3wheret。fzgs_dm='001085'4and(t。lrr_dm='e90e3fe4237c4af988477329c7f2059e'orexists5(selecty。kh_id6fromkhgl_khywdlxxy7wherey。kh_id=t。kh_id8andy。sskhjl_dm='e90e3fe4237c4af988477329c7f2059e')or9t。kpr_dm='e90e3fe4237c4af988477329c7f2059e')10andt。xjbz='9999'11andt。FROMNBGL1='0';SQL>setline300SQL>/ROWCOUNT_LHY————————60已用时间:00:00:20。53执行计划——————————————————————————————————————Planhashvalue:1217125969——————————————————————————————————————————————————————————————————————|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|——————————————————————————————————————————————————————————————————————|0|SELECTSTATEMENT||1|86|28048(1)|00:05:37||1|SORTAGGREGATE||1|86||||*2|FILTER|||||||*3|TABLEACCESSFULL|SWGL_DDJBXX|5926|497K|28048(1)|00:05:37||*4|TABLEACCESSBYINDEXROWID|KHGL_KHYWDLXX|1|57|5(0)|00:00:01||*5|INDEXRANGESCAN|IDX_KHGL_KHYWDLXX_KHID|1||3(0)|00:00:01|————————————————————————————————————————————————————————————————————PredicateInformation(identifiedbyoperationid):——————————————————————————————————-2-filter("T"。"LRR_DM"='e90e3fe4237c4af988477329c7f2059e'OR"T"。"KPR_DM"='e90e3fe4237c4af988477329c7f2059e'OREXISTS(SELECT0FROM"KHGL_KHYWDLXX""Y"WHERE"Y"。"KH_ID"=:B1AND"Y"。"SSKHJL_DM"='e90e3fe4237c4af988477329c7f2059e'))3-filter("T"。"FROMNBGL1"='0'AND"T"。"XJBZ"='9999'AND"T"。"FZGS_DM"='001085')4-filter("Y"。"SSKHJL_DM"='e90e3fe4237c4af988477329c7f2059e')5-access("Y"。"KH_ID"=:B1)统计信息——————————————————————————————————————0recursivecalls0dbblockgets804560consistentgets71127physicalreads0redosize516bytessentviaSQL*Nettoclient469bytesreceivedviaSQL*Netfromclient2SQL*Netroundtripsto/fromclient0sorts(memory)0sorts(disk)1rowsprocessed

  用UNION代替OR对其进行优化后的代码如下:

  SQL>selectcount(*)2from(select*3fromswgl_ddjbxxt4wheret。lrr_dm='e90e3fe4237c4af988477329c7f2059e'5andt。fzgs_dm='001085'6andt。xjbz='9999'7andt。FROMNBGL1='0'8union9select*10fromswgl_ddjbxxt11wheret。kpr_dm='e90e3fe4237c4af988477329c7f2059e'12andt。fzgs_dm='001085'13andt。xjbz='9999'14andt。FROMNBGL1='0'15union16select*17fromswgl_ddjbxxt18whereexists19(selecty。kh_id20fromkhgl_khywdlxxy21wherey。kh_id=t。kh_id22andy。sskhjl_dm='e90e3fe4237c4af988477329c7f2059e')23andt。fzgs_dm='001085'24andt。xjbz='9999'25andt。FROMNBGL1='0');COUNT(*)————————60已用时间:00:00:06。89执行计划——————————————————————————————————————Planhashvalue:3846872744————————————————————————————-----------------------------------------------------------------------------|Id|Operation|Name|Rows|Bytes|TempSpc|Cost(%CPU)|Time|-----------------------------------------------------------------------------------------------------------------------|0|SELECTSTATEMENT||1|||52263(1)|00:10:28||1|SORTAGGREGATE||1||||||2|VIEW||5996|||52263(1)|00:10:28||3|SORTUNIQUE||5996|2238K|6344K|52263(47)|00:10:28||4|UNION-ALL||||||||*5|TABLEACCESSFULL|SWGL_DDJBXX|59|19234||28037(1)|00:05:37||*6|TABLEACCESSBYINDEXROWID|SWGL_DDJBXX|10|3260||1209(1)|00:00:15||*7|INDEXRANGESCAN|IDX_SWGL_DDJBXX_KPRDM|4748|||34(0)|00:00:01||*8|TABLEACCESSBYINDEXROWID|SWGL_DDJBXX|1|326||5(0)|00:00:01||9|NESTEDLOOPS||5927|2216K||22527(1)|00:04:31||10|SORTUNIQUE||10165|565K||1916(1)|00:00:23||11|TABLEACCESSBYINDEXROWID|KHGL_KHYWDLXX|10165|565K||1916(1)|00:00:23||*12|INDEXRANGESCAN|IDX_KHGL_KHYWDLXX_SSKHJL|10165|||111(0)|00:00:02||*13|INDEXRANGESCAN|IDX_SWGL_DDJBXX_KHID|2|||2(0)|00:00:01|-----------------------------------------------------------------------------------------------------------------------PredicateInformation(identifiedbyoperationid):---------------------------------------------------5-filter("T"。"LRR_DM"='e90e3fe4237c4af988477329c7f2059e'AND"T"。"FROMNBGL1"='0'AND"T"。"XJBZ"='9999'AND"T"。"FZGS_DM"='001085')6-filter("T"。"FROMNBGL1"='0'AND"T"。"XJBZ"='9999'AND"T"。"FZGS_DM"='001085')7-access("T"。"KPR_DM"='e90e3fe4237c4af988477329c7f2059e')8-filter("T"。"FROMNBGL1"='0'AND"T"。"XJBZ"='9999'AND"T"。"FZGS_DM"='001085')12-access("Y"。"SSKHJL_DM"='e90e3fe4237c4af988477329c7f2059e')13-access("Y"。"KH_ID"="T"。"KH_ID")统计信息----------------------------------------------------------1recursivecalls0dbblockgets128422consistentgets10308physicalreads0redosize512bytessentviaSQL*Nettoclient469bytesreceivedviaSQL*Netfromclient2SQL*Netroundtripsto/fromclient2sorts(memory)0sorts(disk)1rowsprocessed

  SQL改写之后,执行时间由原来的20秒下降到6秒,逻辑读由804560降低到128422,性能还是有很大提升的,到了这里优化还没完,可以创建一个组合索引进一步优化。

  createindexidxonswgl_ddjbxx(fzgs_dm,xjbz,FROMNBGL1);

  SQLServer怎么使用UNION代替OR提升查询性能

  创建索引之后,原始的SQL执行时间,执行计划,统计信息如下:

  SQL>selectcount(*)rowcount_lhy2fromswgl_ddjbxxt3wheret。fzgs_dm='001085'4and(t。lrr_dm='e90e3fe4237c4af988477329c7f2059e'orexists5(selecty。kh_id6fromkhgl_khywdlxxy7wherey。kh_id=t。kh_id8andy。sskhjl_dm='e90e3fe4237c4af988477329c7f2059e')or9t。kpr_dm='e90e3fe4237c4af988477329c7f2059e')10andt。xjbz='9999'11andt。FROMNBGL1='0';ROWCOUNT_LHY------------60已用时间:00:00:02。96执行计划----------------------------------------------------------Planhashvalue:3049366449--------------------------------------------------------------------------------------------------------|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|--------------------------------------------------------------------------------------------------------|0|SELECTSTATEMENT||1|86|506(0)|00:00:07||1|SORTAGGREGATE||1|86||||*2|FILTER|||||||3|TABLEACCESSBYINDEXROWID|SWGL_DDJBXX|5926|497K|506(0)|00:00:07||*4|INDEXRANGESCAN|IDX|2370||12(0)|00:00:01||*5|TABLEACCESSBYINDEXROWID|KHGL_KHYWDLXX|1|57|5(0)|00:00:01||*6|INDEXRANGESCAN|IDX_KHGL_KHYWDLXX_KHID|1||3(0)|00:00:01|--------------------------------------------------------------------------------------------------------PredicateInformation(identifiedbyoperationid):---------------------------------------------------2-filter("T"。"LRR_DM"='e90e3fe4237c4af988477329c7f2059e'OR"T"。"KPR_DM"='e90e3fe4237c4af988477329c7f2059e'OREXISTS(SELECT0FROM"KHGL_KHYWDLXX""Y"WHERE"Y"。"KH_ID"=:B1AND"Y"。"SSKHJL_DM"='e90e3fe4237c4af988477329c7f2059e'))4-access("T"。"FZGS_DM"='001085'AND"T"。"XJBZ"='9999'AND"T"。"FROMNBGL1"='0')5-filter("Y"。"SSKHJL_DM"='e90e3fe4237c4af988477329c7f2059e')6-access("Y"。"KH_ID"=:B1)统计信息----------------------------------------------------------1recursivecalls0dbblockgets702767consistentgets0physicalreads0redosize516bytessentviaSQL*Nettoclient469bytesreceivedviaSQL*Netfromclient2SQL*Netroundtripsto/fromclient0sorts(memory)0sorts(disk)1rowsprocessed

  改写的SQL:

  SQL>selectcount(*)2from(select*3fromswgl_ddjbxxt4wheret。lrr_dm='e90e3fe4237c4af988477329c7f2059e'5andt。fzgs_dm='001085'6andt。xjbz='9999'7andt。FROMNBGL1='0'8union9select*10fromswgl_ddjbxxt11wheret。kpr_dm='e90e3fe4237c4af988477329c7f2059e'12andt。fzgs_dm='001085'13andt。xjbz='9999'14andt。FROMNBGL1='0'15union16select*17fromswgl_ddjbxxt18whereexists19(selecty。kh_id20fromkhgl_khywdlxxy21wherey。kh_id=t。kh_id22andy。sskhjl_dm='e90e3fe4237c4af988477329c7f2059e')23andt。fzgs_dm='001085'24andt。xjbz='9999'25andt。FROMNBGL1='0');COUNT(*)----------60已用时间:00:00:00。53执行计划----------------------------------------------------------Planhashvalue:2947849958-------------------------------------------------------------------------------------------------------------------------|Id|Operation|Name|Rows|Bytes|TempSpc|Cost(%CPU)|Time|-------------------------------------------------------------------------------------------------------------------------|0|SELECTSTATEMENT||1|||3469(1)|00:00:42||1|SORTAGGREGATE||1||||||2|VIEW||5995|||3469(1)|00:00:42||3|SORTUNIQUE||5995|2238K|4760K|3469(86)|00:00:42||4|UNION-ALL||||||||*5|TABLEACCESSBYINDEXROWID|SWGL_DDJBXX|59|19234||506(0)|00:00:07||*6|INDEXRANGESCAN|IDX|2370|||12(0)|00:00:01||7|TABLEACCESSBYINDEXROWID|SWGL_DDJBXX|10|3260||50(0)|00:00:01||8|BITMAPCONVERSIONTOROWIDS||||||||9|BITMAPAND||||||||10|BITMAPCONVERSIONFROMROWIDS||||||||*11|INDEXRANGESCAN|IDX|2370|||12(0)|00:00:01||12|BITMAPCONVERSIONFROMROWIDS||||||||*13|INDEXRANGESCAN|IDX_SWGL_DDJBXX_KPRDM|2370|||34(0)|00:00:01||*14|HASHJOINRIGHTSEMI||5926|2216K||2423(1)|00:00:30||15|TABLEACCESSBYINDEXROWID|KHGL_KHYWDLXX|10165|565K||1916(1)|00:00:23||*16|INDEXRANGESCAN|IDX_KHGL_KHYWDLXX_SSKHJL|10165|||111(0)|00:00:02||17|TABLEACCESSBYINDEXROWID|SWGL_DDJBXX|5926|1886K||506(0)|00:00:07||*18|INDEXRANGESCAN|IDX|2370|||12(0)|00:00:01|-------------------------------------------------------------------------------------------------------------------------PredicateInformation(identifiedbyoperationid):---------------------------------------------------5-filter("T"。"LRR_DM"='e90e3fe4237c4af988477329c7f2059e')6-access("T"。"FZGS_DM"='001085'AND"T"。"XJBZ"='9999'AND"T"。"FROMNBGL1"='0')11-access("T"。"FZGS_DM"='001085'AND"T"。"XJBZ"='9999'AND"T"。"FROMNBGL1"='0')filter("T"。"FROMNBGL1"='0'AND"T"。"XJBZ"='9999'AND"T"。"FZGS_DM"='001085')13-access("T"。"KPR_DM"='e90e3fe4237c4af988477329c7f2059e')14-access("Y"。"KH_ID"="T"。"KH_ID")16-access("Y"。"SSKHJL_DM"='e90e3fe4237c4af988477329c7f2059e')18-access("T"。"FZGS_DM"='001085'AND"T"。"XJBZ"='9999'AND"T"."FROMNBGL1"='0')统计信息---------------------------------------------------------1recursivecalls0dbblockgets25628consistentgets0physicalreads0redosize512bytessentviaSQL*Nettoclient469bytesreceivedviaSQL*Netfromclient2SQL*Netroundtripsto/fromclient1sorts(memory)0sorts(disk)1rowsprocessed。

以上是“SQLServer如何使用UNION代替OR提升查询性能”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQLServer如何使用UNION代替OR提升查询性能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SQLServer中如何使用索引来提高查询性能

在SQLServer中,可以通过以下方式来使用索引来提高查询性能:创建索引:通过CREATE INDEX语句在表上创建索引。可以为表的一个或多个列创建单列索引或复合索引。CREATE INDEX idx_name ON table_name
SQLServer中如何使用索引来提高查询性能
2024-04-09

PHP8中如何使用JIT编译提升代码性能?

PHP语言一直以来都被广泛用于构建Web应用程序,但是由于解释执行的特性,导致了其性能相对较低。为了提升PHP的性能,从PHP7开始引入了JIT(Just-in-Time)编译器,而在全新的PHP8版本中,JIT编译的功能得到了进一步的改进
2023-10-22

如何在SQLite中使用索引来提高查询性能

在SQLite中使用索引可以大大提高查询性能。以下是一些使用索引提高性能的方法:创建索引:可以在需要加速的列上创建索引,通过在查询条件中使用这些列,可以使查询更快速。可以通过以下语句创建索引:CREATE INDEX index_name
如何在SQLite中使用索引来提高查询性能
2024-04-09

如何使用代码重构技术提升 PHP 函数性能?

代码重构是提升 php 函数性能的有效技术,通过内联变量、提取方法、使用查找表等方式优化代码结构和减少重复,包括:1. 内联变量:消除变量创建和销毁开销。2. 提取方法:提高代码可读性和可维护性。3. 使用查找表:加速常量值查找。如何使用代
如何使用代码重构技术提升 PHP 函数性能?
2024-04-26

编程热搜

目录