SQL In的替换
前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的替换的更多相关文章
- SQL*Plus中替换变量与定义变量
替换变量 SQL*Plus中的替换变量又叫替代变量,它一般用来临时存储相关数据:在SQL语句之间传递值.一般使用&或&&前缀来指定替换变量. 关于使用替换变量,一般是利用其创建 ...
- sql数据库批量替换dedecms内容关键字
之前写了一篇dedecms后台批量替换文章中的关键词,这边我们介绍一下用sql数据库批量替换dedecms内容关键字,当然要求你对数据库比较熟悉,修改前请自行做好备份. 1.更改文章中的内容 upda ...
- sql server 字符串替换函数REPLACE
sql server 字符串替换函数REPLACE函数的使用 <pre name="code" class="sql">--参数1:需要替换字符的母 ...
- 使用SQL命令批量替换WordPress站点中图片的URL链接地址
本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=689 前言: 本文记录了使用SQL命令批量替换URL的方法以及除了替换URL之外,网站更换图片URL地址所必须的其他 ...
- SQL 批量字符串替换
--在SQL SERVER中批量替换字符串的方法 update table[表名] set Fields[字段名]=replace(Fields[字段名],'被替换原内容','要替换成的内容') up ...
- [转]在SQL中用正则表达式替换html标签
本文转自:http://blog.csdn.net/dhttaso/article/details/6045380 由于数据库的一个表字段中多包含html标签,现在需要修改数据库的字段把html标签都 ...
- 在SQL中用正则表达式替换html标签
由于数据库的一个表字段中多包含html标签,现在需要修改数据库的字段把html标签都替换掉.当然我可以通过写一个程序去修改,那毕竟有点麻烦.直接在查询分析器中执行,但是MS SQL Server并没有 ...
- 在SQL 语句批量替换数据库字符串的方法
update table[表名] set Fields[字段名]=replace(Fields[字段名],'被替换原内容','要替换成的内容')update ProgInfo set JoinTime ...
- 在SQL中用正则表达式替换html标签(2)
由于数据库的一个表字段中多包含html标签,现在需要修改数据库的字段把html标签都替换掉.当然我可以通过写一个程序去修改,那毕竟有点麻烦.直接在查询分析器中执行,但是MS SQL Server并没有 ...
随机推荐
- oracle 的一点累积
1. oracle用户相关 sqlplus sys/oracle as sysdba -- sys登录 create user xxx identified by password; -- ...
- Qt如何去掉按钮等控件的虚线框(焦点框)(三种办法)
方法1:可以通过代码ui->pushButton->setFocusPolicy(Qt::NoFocus)或在Qt Creator的属性列表中设置. 方法2:如果在嵌入式设备中需要通过按键 ...
- COJ 2124 Day8-例1
Day8-例1 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 给定n.m的值,求
- Android WebView播放视频flash(判断是否安装flash插件)
Android WebView播放flash(判断是否安装flash插件) 最近帮一个同学做一个项目,断断续续的一些知识点记录一下.一个页面中有一个WebView,用来播放swf,如果系统中未安装f ...
- 【转】android开发中如何结束所有的activity
原文网址:http://java--hhf.iteye.com/blog/1826880 每一个activity都有自己的生命周期,被打开了最终就要被关闭. 四种结束当前的activity方法 //关 ...
- 【转】 Android的NDK开发(1)————Android JNI简介与调用流程
原文网址:http://blog.csdn.net/conowen/article/details/7521340 ****************************************** ...
- Oracle中使用profile管理用户口令
概述:profile 是口令限制,资源限制的命令集合,当建立数据库的,oracle 会自动建立名称为default 的profile.当建立用户没有指定profile 选项,那么oracle 就会将d ...
- 暴力求解——Equivalent Strings
Submit Status Description Today on a lecture about strings Gerald learned a new definition of string ...
- 使用string
public class UsingString { public static void testFindStr(String str) { System.out.p ...
- Hibernate五 HQL查询
HQL查询一 介绍1.HQL:Hibernate Query Language,是一种完全面向对象的查询语言.使用Hibernate有多重查询方式可供选择:hibernate的HQL查询,也可以使用条 ...