+ -
当前位置:首页 → 问答吧 → 优化查询小问题

优化查询小问题

时间:2011-11-30

来源:互联网

 Select * from table1 where tid=2 or tid=3
这个就算tid使用了索引也会失效,那怎么办?在查询的时候肯定会有很多查询是需要使用 or 的啊

作者: rczjp   发布时间: 2011-11-30

Select * from table1 where tid in(2,3)
试试

作者: fredrickhu   发布时间: 2011-11-30

不懂索引的飘过,好吧,我承认我今天只是为了回帖而来的

作者: SylarZhou   发布时间: 2011-11-30

引用 1 楼 fredrickhu 的回复:
Select * from table1 where tid in(2,3)
试试
这两种的效率是一样的

作者: rczjp   发布时间: 2011-11-30

引用楼主 rczjp 的回复:
 Select * from table1 where tid=2 or tid=3
这个就算tid使用了索引也会失效,那怎么办?在查询的时候肯定会有很多查询是需要使用 or 的啊
你这样用,TID可以使用到索引.

或者:
Select * from table1 where tid=2 
union all
Select * from table1 where tid=3

作者: dawugui   发布时间: 2011-11-30

引用楼主 rczjp 的回复:
 Select * from table1 where tid=2 or tid=3
这个就算tid使用了索引也会失效,那怎么办?在查询的时候肯定会有很多查询是需要使用 or 的啊


SQL code
select * from table1 where tid = 2
union all
select * from table1 where tid = 3


作者: OrchidCat   发布时间: 2011-11-30

SQL code

--试试这样
Select * from table1 where tid>1 and tid<4

作者: gogodiy   发布时间: 2011-11-30

如果tid是聚集索引,你这样写法应该可以用到的。

作者: gogodiy   发布时间: 2011-11-30

引用 6 楼 gogodiy 的回复:
SQL code

--试试这样
Select * from table1 where tid>1 and tid<4


恩 都忘记这样的写法了。

作者: fredrickhu   发布时间: 2011-11-30

@OrchidCat
union这个和or效率也是一样 另外 or情况多的时候这样也不好吧?

引用 7 楼 gogodiy 的回复:
如果tid是聚集索引,你这样写法应该可以用到的。
恩,tid=2 or num=34 or name='a' 这样的情况 比如 num 是没有索引

不好意思 这个示例写的不好,仅仅想表达 or 没有使用索引的情况怎么解决的好呢?

作者: rczjp   发布时间: 2011-11-30

没有索引,也想使用索引,或者想快速,未必要求太高了吧?

作者: dawugui   发布时间: 2011-11-30

引用 10 楼 dawugui 的回复:
没有索引,也想使用索引,或者想快速,未必要求太高了吧?
恩,因为查询的条件太多,这个是需求没有办法呵呵
所以想来请教下是否有个方案。

作者: rczjp   发布时间: 2011-11-30