相信大家在很多实际业务中(特别是后台系统)会使用到各种筛选条件来筛选结果集

首先添加测试数据

),  Age INT)
go
CREATE INDEX idx_age ON TempList (Age)
GO

DECLARE @i INT;
;

BEGIN
  INSERT INTO TempList (Name, Age)VALUES(CAST(@i AS VARCHAR),@i)
  ;
END
GO

1.有使用EXEC来避免全表扫描

;

DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT * FROM TempList'

IF @age IS NOT NULL
    SET @sql = @sql + ' WHERE Age = @age'

EXEC sp_executesql @sql, N'@age int', @age

或者条件少的情况下

;

IF @age IS NOT NULL
    SELECT * FROM TempList WHERE Age = @age
ELSE
    SELECT * FROM TempList

2.使用IS NULL来实现

;

SELECT * FROM TempList WHERE (@age IS NULL OR Age = @age)

SELECT * FROM TempList WHERE (Age = @age OR @age IS NULL)

SELECT * FROM TempList WHERE Age=isnull(@age, Age) 

第一种方案,不会破坏索引,但冗余的代码看起来让人难受

第二种方案,会导致全表扫描(破坏索引)

以上是网上查阅的资料,方案二不符合SARG,问题在OR,如果我不使用OR,用AND呢

;

SELECT * FROM TempList WHERE @age IS NOT NULL and Age = @age

版权声明:本文原创发表于 博客园,作者为 托大人 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

如何优雅的使用 参数 is null而不导致全表扫描(破坏索引)的更多相关文章

  1. C库中strcpy函数的参数为NULL问题

    在标准C库的字符串处理函数 strxxx 一系列函数中,对参数传入NULL会导致程序崩溃. 如下代码中,无论那个参数为NULL,都会让程序崩溃,所以我们必须自己对参数进行传入前的检查. int mai ...

  2. SpringBoot接口 - 如何优雅的对参数进行校验?

    在以SpringBoot开发Restful接口时, 对于接口的查询参数后台也是要进行校验的,同时还需要给出校验的返回信息放到上文我们统一封装的结构中.那么如何优雅的进行参数的统一校验呢? @pdai ...

  3. 使用Spring Validation优雅地校验参数

    写得好的没我写得全,写得全的没我写得好 引言 不知道大家平时的业务开发过程中 controller 层的参数校验都是怎么写的?是否也存在下面这样的直接判断? public String add(Use ...

  4. Dubbo服务如何优雅的校验参数

    一.背景 服务端在向外提供接口服务时,不管是对前端提供HTTP接口,还是面向内部其他服务端提供的RPC接口,常常会面对这样一个问题,就是如何优雅的解决各种接口参数校验问题? 早期大家在做面向前端提供的 ...

  5. MVC5的控制器,使用HttpPost方式时,接收的参数为null的原因

    1.问题现象 POST提交时,控制的Action接收到的参数为null, 但Request.Form.Request.Params等集合其实是包含提交的所有数据的 .如下截图: 2.该问题很诡异,重新 ...

  6. SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer);

    SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer); 第一种方法: 如果你 ...

  7. call和apply第一个参数为null/undefined,函数this指向全局对象

    call和apply第一个参数为null/undefined,函数this指向全局对象,在浏览器中是window,在node中是global 在严格模式中(ie 6/7/8/9 除外),传入null/ ...

  8. 关于后台接收参数为null的问题之ajax--contentType

    ajax方法中的参数: contentType:发送至服务器时内容的编码类型,一般默认:application/x-www-form-urlencoded(适应大多数的场合) dataType:预期服 ...

  9. vue中el-upload上传多图片且携带参数,批量而不是一张一张的解决方案

    现在前端基本不是vue技术栈就是react技术栈. vue技术栈最常用的就是element-ui的ui框架了. 在项目中,我们经常会碰到这种需求:批量上传文件 element-ui 确实也为我们提供了 ...

随机推荐

  1. Centos 6.9 安装xtrabackup-2.4.8 通用包,yum安装,全量备份,增量备份

    xtrabackup-2.4.8的安装及使用 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备 ...

  2. 主成分分析PCA详解

    转载请声明出处:http://blog.csdn.net/zhongkelee/article/details/44064401 一.PCA简介 1. 相关背景 上完陈恩红老师的<机器学习与知识 ...

  3. TGI

    淘宝的很多分析会用到TGI这个指标,但是是如何计算的以及该如何理解和应用这个指标?TGI:即Target Group Index(目标群体指数)TGI指数= [目标群体中具有某一特征的群体所占比例/总 ...

  4. jQuery学习之旅 Item2 选择器【二】

    这里接着上一个Item1 把jQuery的选择器讲完.主要有:属性过滤器和子元素过滤器 点击"名称"会跳转到此方法的jQuery官方说明文档. 5. 属性过滤器 Attribute ...

  5. [Python]range与xrange用法对比

    [整理内容]具体如下: 先来看如下示例:>>>x=xrange(0,8)>>> print xxrange(8)>>>print x[0]0> ...

  6. win10想开测试模式,提示“设置元素数据时出错

    系统中按WIN键,搜索栏输入'CMD',右键点击找到的cmd.exe,选择'以管理员身份运行'.输入:"bcdedit -set loadoptions DDISABLE_INTEGRITY ...

  7. SpringCloud实战8-Bus消息总线

    好了现在我们接着上一篇的随笔,继续来讲.上一篇我们讲到,我们如果要去更新所有微服务的配置,在不重启的情况下去更新配置,只能依靠spring cloud config了,但是,是我们要一个服务一个服务的 ...

  8. CentOS7防火墙管理firewalld

    学习apache安装的时候需要打开80端口,由于centos 7版本以后默认使用firewalld后,网上关于iptables的设置方法已经不管用了,想着反正iptable也不太熟悉,索性直接搬官方文 ...

  9. NavigationView头部设置监听事件

    直接写解决方法吧: 1.将XML里的静态引入删除: <android.support.design.widget.NavigationView android:id="@+id/nav ...

  10. 【爆料】-《英博夏尔大学毕业证书》BPP一模一样原件

    英博夏尔大学毕业证[微/Q:2544033233◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归&a ...