首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

多条记要筛选多条记录 用什么方式做效果最好呢

2013-07-09 
多条记录筛选多条记录 用什么方式做效果最好呢?本帖最后由 henjiandan 于 2013-06-23 01:57:19 编辑A表 ID

多条记录筛选多条记录 用什么方式做效果最好呢?
本帖最后由 henjiandan 于 2013-06-23 01:57:19 编辑 A表 

ID 
1  
2  
3  
4  

B表(大数据 百万条记录)
列Name
2  456
4  789



条件是 要查出 A表不包含 (B表 包含'456,789'的) ID 

得到 
1
3

原来用的 in 来做 
select ID from A where ID not in(select ID from B where B.Name in ('456','789'))
效率极低,
在线请教高人指点..
[解决办法]

引用:
Quote: 引用:

TRY.
SELECT ID from A WHERE EXISTS (SELECT 1 from B WHERE A.ID=ID AND ( NAME <> '456' OR NAME <>'789'))


首先得是 NOT EXISTS吧 

获取B表不一定只是 456,789 可能还有更多的 如果不用in 还有其他方法吗?

用NOT EXISTS 则
SELECT ID from A WHERE NOT EXISTS (SELECT 1 from B WHERE A.ID=ID AND ( NAME = '456' OR NAME ='789'))

[解决办法]
引用:
Quote: 引用:

条件多那也得列举啊,大表扫描,理想效果是一次,看场景,然后通过索引等加速。


AND ( NAME = '456' OR NAME ='789') 



AND  NAME in('456','789')

没区别吧? 

用IN入在NAME 建立有索引的话则不会走索引,用 AND/OR 则有索引,会走索引,提升查询性能。
[解决办法]

select ID from A 
except
select ID from B where B.Name in ('456','789')

热点排行