读书人

关于SQL Server的效率如何避免表达式

发布时间: 2012-01-26 19:40:46 作者: rapoo

关于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
[解决办法]
这样的问题我喜欢用临时表
[解决办法]
用表关联试了吗?

读书人网 >SQL Server

热点推荐