前2天在搞SQL的的时候,发现其中有很多in的操作,诸如:id in(1,2,3)或id in(select id from table……),这个对SQL来说并不是最好的选择,执行效率是偏低的[它执行的是全表遍历],同事问那用什么来替代In Or Not In呢?其实方法还是有的,比方用EXISTS替代IN、用NOT EXISTS替代NOT IN。在这里我另外一种方式来实现替代In.下面先来看下测试的数据结构

id	stuid	stuname	birthdat	areaorganid
1 4538 张文 1977-06-30 00:00:00.000 36
2 4538 张文 1977-06-30 00:00:00.000 36
3 5324 王清超 1971-10-13 00:00:00.000 36
4 5324 王清超 1971-10-13 00:00:00.000 36
5 5969 卫石林 1982-03-25 00:00:00.000 36
6 5969 卫石林 1982-03-25 00:00:00.000 36
7 5865 林雪健 1981-06-25 00:00:00.000 36
1 4538 张文 1977-06-30 00:00:00.000 36
2 4538 张文 1977-06-30 00:00:00.000 36
3 5324 王清超 1971-10-13 00:00:00.000 36
4 5324 王清超 1971-10-13 00:00:00.000 36
5 5969 卫石林 1982-03-25 00:00:00.000 36
6 5969 卫石林 1982-03-25 00:00:00.000 36
7 5865 林雪健 1981-06-25 00:00:00.000 36

SELECT * FROM dbo.AAAA WHERE id IN(SELECT id FROM dbo.AAAA WHERE stuname='张文')

  上面的SQL是我们最常见到的查询方式,咋一看没什么问题,可实际上当数据量偏大的时候响应时间是比较久的,而且会使索引无法发挥作用。那怎么来改造一下呢?我们直接来看代码:

SET STATISTICS PROFILE ON
SELECT * FROM (SELECT id FROM dbo.AAAA WHERE stuname='张文')a INNER JOIN
AAAA b ON a.id=b.id

  是不是很眼熟呢,这种形式的查询也是我们最常见到的,换这种方式后查询的执行效率会得到恨到的提升,不信大家可以自己动手试一试。

  可以有的童鞋会问了,那id in(1,2,3)这种形式的怎么来弄啊,没有办法像上面一样来操作啊,别急,我给出我比较常用的方式。当然还有别的方式,欢迎大家补充。

一般in(1,2,3)这样的形式多半是拼接而来的SQL,字符串嘛,我们转换一下,我个人习惯的是用CTE来搞定,不熟悉CTE的百度哈,很多。下面上具体的代码:

;WITH mycte AS
(
SELECT col=1 UNION ALL
SELECT 2 UNION ALL
SELECT 3
)
SELECT * FROM dbo.AAAA a,mycte b WHERE a.id=b.col

  小技巧,直接将in括号里面的【,】替换成UNION ALL SELECT即可,是不是很方便。

SQL In的替换的更多相关文章

  1. SQL*Plus中替换变量与定义变量

    替换变量 SQL*Plus中的替换变量又叫替代变量,它一般用来临时存储相关数据:在SQL语句之间传递值.一般使用&或&&前缀来指定替换变量. 关于使用替换变量,一般是利用其创建 ...

  2. sql数据库批量替换dedecms内容关键字

    之前写了一篇dedecms后台批量替换文章中的关键词,这边我们介绍一下用sql数据库批量替换dedecms内容关键字,当然要求你对数据库比较熟悉,修改前请自行做好备份. 1.更改文章中的内容 upda ...

  3. sql server 字符串替换函数REPLACE

    sql server 字符串替换函数REPLACE函数的使用 <pre name="code" class="sql">--参数1:需要替换字符的母 ...

  4. 使用SQL命令批量替换WordPress站点中图片的URL链接地址

    本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=689 前言: 本文记录了使用SQL命令批量替换URL的方法以及除了替换URL之外,网站更换图片URL地址所必须的其他 ...

  5. SQL 批量字符串替换

    --在SQL SERVER中批量替换字符串的方法 update table[表名] set Fields[字段名]=replace(Fields[字段名],'被替换原内容','要替换成的内容') up ...

  6. [转]在SQL中用正则表达式替换html标签

    本文转自:http://blog.csdn.net/dhttaso/article/details/6045380 由于数据库的一个表字段中多包含html标签,现在需要修改数据库的字段把html标签都 ...

  7. 在SQL中用正则表达式替换html标签

    由于数据库的一个表字段中多包含html标签,现在需要修改数据库的字段把html标签都替换掉.当然我可以通过写一个程序去修改,那毕竟有点麻烦.直接在查询分析器中执行,但是MS SQL Server并没有 ...

  8. 在SQL 语句批量替换数据库字符串的方法

    update table[表名] set Fields[字段名]=replace(Fields[字段名],'被替换原内容','要替换成的内容')update ProgInfo set JoinTime ...

  9. 在SQL中用正则表达式替换html标签(2)

    由于数据库的一个表字段中多包含html标签,现在需要修改数据库的字段把html标签都替换掉.当然我可以通过写一个程序去修改,那毕竟有点麻烦.直接在查询分析器中执行,但是MS SQL Server并没有 ...

随机推荐

  1. js/bat批处理调用谷歌浏览器chrome批量打开网页测试web性能

    批处理批量打开网页 其实用java就可以搞定,但是这么一个轻巧的测试,js或者bat批处理去一次性打开几百个网页测试一下页面没必要上java 两者的区别,js的话,只能打开多个浏览器实例,不方便查看效 ...

  2. Qt tip 网络请求 QNetworkRequest QJason 处理 JSON

    http://blog.csdn.net/linbounconstraint/article/details/52399415 http://download.csdn.net/detail/linb ...

  3. 【HDOJ】2217 Visit

    挺好的一道DP. /* 2217 */ #include <iostream> #include <cstdio> #include <cstring> #incl ...

  4. DP(斜率优化):HDU 3507 Print Article

    Print Article Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)To ...

  5. IOI 2009:Mecho

    IOI2009 Mecho Time Limit: 10000ms Memory Limit: 262144KB This problem will be judged on SPOJ. Origin ...

  6. 【模拟】FOJ 2244 Daxia want to buy house

    题目链接: http://acm.fzu.edu.cn/problem.php?pid=2244 题目大意: 每月还款额=贷款本金×[月利率×(1+月利率)^还款月数]÷[(1+月利率)^还款月数-1 ...

  7. Fragmen横竖屏切换,导致页面混乱,oncreateView重复调用

    在清单文件Activity设置属性 android:screenOrientation="landscape" android:configChanges="screen ...

  8. HttpContext.Current.Cache 和 HttpRuntime.Cache 区别

    原文地址:http://blog.csdn.net/avon520/article/details/4872704 .NET中Cache有两种调用方式:HttpContext.Current.Cach ...

  9. Linux内存寻址之分段机制

    前言 最近在学习Linux内核,读到<深入理解Linux内核>的内存寻址一章.原本以为自己对分段分页机制已经理解了,结果发现其实是一知半解.于是,查找了很多资料,最终理顺了内存寻址的知识. ...

  10. linux 搭建vpn (pptp)

    一.VPN服务器环境说明 操作系统:CentOS release 6.4 (Final) 本地网卡: 复制代码 代码如下: # ifconfig em1 Link encap:Ethernet HWa ...