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

SQL语句中的多个OR该怎么来优化

2012-02-27 
SQL语句中的多个OR该如何来优化?selectID,SmallPic,UpTime,BrandIDfromInfoStyleWHEREisShow YANDSex2AN

SQL语句中的多个OR该如何来优化?
select   ID,SmallPic,UpTime,   BrandID   from   InfoStyle     WHERE   isShow= 'Y '       AND   Sex=2   AND   (SubClass1= '180301 '   OR   SubClass2= '180301 ')       order   by   UpTime  

现在是or影响了很大速度?现在该如何来优化呢?现在表中记录数有50万了。但是现在暂时不考虑分表。如何做呢?谢谢!希望大家都给给SQL语句方面的优化!谢谢!

[解决办法]
用union all 代替
select ID,SmallPic,UpTime, BrandID from InfoStyle WHERE isShow= 'Y ' AND Sex=2 AND SubClass1= '180301 ' order by UpTime
union all
select ID,SmallPic,UpTime, BrandID from InfoStyle WHERE isShow= 'Y ' AND Sex=2 AND SubClass2= '180301 ' order by UpTime



[解决办法]
使用Union All 是个比较好的方法,同意楼上的解法
[解决办法]
LZ,如果要按UpTime排序的话,运行tomyuansir() ( ) 信誉:100 的方法应该会提示出错
如果你想提高你的查询效率,从你的语句上看,也优化不了什么,
在表上建立索引吧
不过你先可以这样试试看
Select * From (
select ID,SmallPic,UpTime, BrandID from InfoStyle WHERE isShow= 'Y ' AND Sex=2 AND SubClass1= '180301 '
union all
select ID,SmallPic,UpTime, BrandID from InfoStyle WHERE isShow= 'Y ' AND Sex=2 AND SubClass2= '180301 '
) T Order By UpTime
[解决办法]
UNION ALL 就会比 OR 快吗,个人认为不见得。

SubClass1 和 SubClass2 加索引吧。
[解决办法]
to SoftwKLC(自由的飞鸟(卢成))
注意优化去了!!
我那样子写是会报错!!
没仔细看!(*^__^*) 嘻嘻……
[解决办法]
select ID,SmallPic,UpTime, BrandID from InfoStyle WHERE isShow= 'Y ' AND Sex=2 AND (SubClass1= '180301 ' OR SubClass2= '180301 ') order by UpTime
-----------------------

50万数据有什么理由慢:

ID:这个貌似标识列,不是主键就设为主键。
isShow:这个貌似当逻辑指用,改为bit类型。
[解决办法]
发现的确可以提高六倍 多的速度。但是发现查询的结果却是有点出入哦。
-------------
因为你的结果没有按UpTime 排序,还会去掉重复的行
最好方法加索引吧....
[解决办法]
to SoftwKLC(自由的飞鸟(卢成))
union all
不会取出重复行吧
!!
[解决办法]
to SoftwKLC(自由的飞鸟(卢成))
union all
不会去除重复行吧
!!
[解决办法]
tomyuansir() ( ) 信誉:100
union all
不会去除重复行吧
!!
------------------------
我是回答LZ写的那个 yua3891(大头) ( ) 信誉:100 2007-09-24 13:58:13 得分: 0 ,
它是用Union的,呵呵
[解决办法]
yua3891(大头) ( ) 信誉:100 2007-09-24 14:17:02 得分: 0
SoftwKLC(自由的飞鸟(卢成兄。你刚刚写的SQL语句中的

  AND Sex =2
  AND SubClass2 = '180301 '
  )T

那个T是什么意思啊?
--------------------------
T只是个别名,你可以加任意的如,A ,B ,TT 都可以
把整个下面这部分看作T
SELECT ID, SmallPic, UpTime, BrandID
FROM InfoStyle
WHERE isShow = 'Y '
AND Sex =2
AND SubClass1 = '180301 '
UNION ALL SELECT ID, SmallPic, UpTime, BrandID
FROM InfoStyle
WHERE isShow = 'Y '
AND Sex =2
AND SubClass2 = '180301 '
[解决办法]
union all不会除掉重复行,去掉重复数据就得用union



事实用union all也未必能提高查询效率
其实你的OR查询语句并没有什么不好,只要在SubClass1,SubClass2 2个字段上建上索引即可。

查询速度自然就上去了,这个可以不用union all(或union)
[解决办法]
T是别名,应该是保存记录的临时表的表明一样
[解决办法]
学习~~

[解决办法]
学习了
[解决办法]
建立个视图
[解决办法]
SQL优化要看具体的情况,下面的语句,将or换成union all,效率要低得多:
use northwind
go
select * from orders where customerid= 'VINET ' or customerid= 'TOMSP '
select * from orders where customerid= 'VINET '
union all
select * from orders where customerid= 'TOMSP '
你能将表的结构,表上的索引分布,以及你的数据发到我的邮箱:liubo7971@163.com中吗,我帮你分析一下.
[解决办法]
阅过,高手很多嘛~~~

热点排行