日期:2014-05-18  浏览次数:20631 次

关于SQL Server的效率,如何处理表达式or的问题
头大了

刚刚看到msdnlu推荐的技术资料:
“IN   的作用相当与OR,都会引起全表扫描,如果tid上有索引,其索引也会失效。”
“如果or两边的查询列是一样的话,那么用union则反倒和用or的执行速度差很多,虽然这里union扫描的是索引,而or扫描的是全表。”

问题是,我现在的数据库的设计是非常需要用到or的,如果为了效率改设计,则整个业务逻辑都会变动了。我用的方式如下:
Select   *   From   Table   Where   TypeID=1   or   TypeID=2   or   TypeID=3   Order   by   Date
TypeID是索引,本来正打算用union的,现在还有什么办法优化吗?
而且这个数据量不会小,我还要做分页存储过程的呢。

bit类型上用不用索引倒关系不大了,本来影响到的数据量也不会太多,反倒这个问题太严重了!

------解决方案--------------------
坐了沙发
------解决方案--------------------
用表进行关联。

方法:

1、创建临时表#t,追加1、2、3这三个值。
2、用你的表和这个临时表进行关联。

------解决方案--------------------
create table #t(id int)

insert into #t select 1
insert into #t select 2
insert into #t select 3


Select *
From [Table] a inner join #t b on a.TypeID=b.id
Order by [Date]

drop table #t
------解决方案--------------------
楼上方法不错
------解决方案--------------------
楼上的方法不是很好,insert需要不少的时间
我的方法如下:
Select * From Table a jion (select Typeid=1 union all select typeid=2 union select typeid=3) as b where a.typeid=b.typeid
------解决方案--------------------
这样的问题我喜欢用临时表
------解决方案--------------------
用表关联试了吗?