Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 929|回复: 0

Sql Server 多条件查询优化

[复制链接]

该用户从未签到

发表于 2011-10-18 17:03:52 | 显示全部楼层 |阅读模式
存储过程中编写多条件的查询语句,很多人习惯用字符串拼接去做,字符串的拼接虽然灵活但是效率却不是很理想,因为查询语句属于字符串拼接出来,每次调用存储过程需要重新编译查询语句。
      如果需要高效的查询,告别拼接吧,废话不多说,看下面的代码:
USE [MASTER]
GO
IF  EXISTS (SELECT NAME FROM SYSDATABASES WHERE NAME = N'TEST')
DROP DATABASE [TEST]
CREATE DATABASE TEST
GO
USE [TEST]
GO
CREATE TABLE [TAB1]
(
A VARCHAR(10),
B VARCHAR(10),
C VARCHAR(10),
D VARCHAR(10),
)
GO
INSERT INTO [TAB1] VALUES('A','B','C','D')
GO
/*
1.字符串拼接查询语句
*/
CREATE PROC [PROC1]
@A VARCHAR(10)=NULL,
@B VARCHAR(10)=NULL,
@C VARCHAR(10)=NULL,
@D VARCHAR(10)=NULL
AS
BEGIN
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT * FROM [TAB1] WHERE 1=1 '
IF @A IS NOT NULL
  SET @SQL=@SQL+'AND [A]='''+@A+''''
IF @B IS NOT NULL
  SET @SQL=@SQL+'AND [B]='''+@B+''''
IF @C IS NOT NULL
  SET @SQL=@SQL+'AND [C]='''+@C+''''
IF @D IS NOT NULL
  SET @SQL=@SQL+'AND [D]='''+@D+''''
EXEC(@SQL)
END
GO
/*
2.高效的查询语句
*/
CREATE PROC [PROC2]
@A VARCHAR(10)=NULL,
@B VARCHAR(10)=NULL,
@C VARCHAR(10)=NULL,
@D VARCHAR(10)=NULL
AS
BEGIN
SELECT * FROM [TAB1] WHERE
  ((@A IS NOT NULL AND [A]=@A) OR (@A IS NULL)) AND
  ((@B IS NOT NULL AND [B]=@B) OR (@B IS NULL)) AND
  ((@C IS NOT NULL AND [C]=@C) OR (@C IS NULL)) AND
  ((@D IS NOT NULL AND [D]=@D) OR (@D IS NULL))
END

代码不多,下面测试一下两个存储过程的性能
proc1 循环100次 耗时:0.156秒
proc1 循环200次 耗时:0.373秒
proc1 循环300次 耗时:0.733秒
proc2 循环100次 耗时:0.106秒
proc2 循环200次 耗时:0.326秒
proc2 循环300次 耗时:0.623秒
备注:此结果不能作为性能提升依据
回复

使用道具 举报

该用户从未签到

发表于 2011-10-24 20:45:42 | 显示全部楼层
不错,顶一个!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-21 19:48 , Processed in 0.442422 second(s), 34 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表