前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. linux 修改目录文件权限,目录文件所属用户,用户组

    1:查看命令:ll drwxr-xr-x  4 gamer ftp      4096 Mar  7 16:56 gstore drwxrwxrwx 10 root  ftp      4096 De ...

  2. Jersey Politics

    poj2454:http://poj.org/problem?id=2454 题意:给你3*k个数,然后让你分成三堆,使得至少其中的两堆中的数字之和大于500*k.题解:这道题一开始我并不知道怎么做, ...

  3. Atlantis

    poj1151:http://poj.org/problem?id=1151 题意:求矩形面积的并题解:扫描线加线段树 #include<iostream> #include<cst ...

  4. 【转】【Android】使用BaseAdapter实现复杂的ListView

    原文网址:http://blog.csdn.net/jueblog/article/details/11857281 使用BaseAdapter实现复杂的ListView的步骤: 1. 数据你要准备好 ...

  5. 数据结构(树链剖分,堆):HNOI 2016 network

    2215. [HNOI2016]网络 ★★★☆   输入文件:network_tenderRun.in   输出文件:network_tenderRun.out   简单对比时间限制:2 s   内存 ...

  6. UTF8与GBK、GB2312等其他字符编码的相互转换

    utf8与其他字符编码的转换是国际化必然遇到的问题. windows的api函数对: WideCharToMultiByte和MultiByteToWideChar 个人喜欢的跨平台库: 单纯做字符编 ...

  7. Lucene实例教程

    Lucene是apache组织的一个用java实现全文搜索引擎的开源项目. 其功能非常的强大,api也很简单.总得来说用Lucene来进行建立 和搜索和操作数据库是差不多的(有点像),Document ...

  8. android图片缓存框架Android-Universal-Image-Loader(二)

    http://blog.csdn.net/king_is_everyone/article/details/35595515 这篇打算直接告诉大家怎么用吧,其实这个也不是很难的框架,大致使用过程如下: ...

  9. Swoole源代码学习记录(十五)——Timer模块分析

    swoole版本号:1.7.7-stable Github地址:点此查看 1.Timer 1.1.swTimer_interval_node 声明: // swoole.h 1045-1050h ty ...

  10. Web站点架构设计考虑的因素

    转自http://blog.csdn.net/moshengtan/article/details/8990052 1    Web负载均衡 1.1 - 使用商业硬件实现 最经常使用的F5 与citr ...