能把这个sql语句优化一下么

kk297173176 2010-04-20 12:16:57
select * from tb_pan where p_Boss='1111' or p_lBoss='1111'
or p_rBoss='1111' or p_new1='1111' or p_new2='1111' or p_new3='1111' or p_new4='1111'

红色的是表,蓝色是列
能把where后边的缩短点不?contains()可以么?
...全文
146 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
kk297173176 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bestzrz 的回复:]
楼主不是想优化语句的性能,是想用最少的字符写出后面的过滤条件
[/Quote]

最主要的是想用最少的字符写出过滤条件,但是性能当然也要考虑,性能越好就越好呀
--小F-- 2010-04-20
  • 打赏
  • 举报
回复
基本没办法优化了..
dawugui 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 kk297173176 的回复:]
select * from tb_pan where p_Boss='1111' or p_lBoss='1111'
or p_rBoss='1111' or p_new1='1111' or p_new2='1111' or p_new3='1111' or p_new4='1111'

红色的是表,蓝色是列
能把where后边的缩短点不?contains()可以么?
[/Quote]
你这是不同的列,无法再进行优化了.
其实你这样的查询本身就已经不错了.
kk297173176 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sql77 的回复:]
全文索引CONTAINS(*,..)来查找,

你这样的条件,用UNION ALL来试试吧
[/Quote]
能具体点么,以前没有用过这个方法
SQL77 2010-04-20
  • 打赏
  • 举报
回复
全文索引CONTAINS(*,..)来查找,

你这样的条件,用UNION ALL来试试吧
老黎 2010-04-20
  • 打赏
  • 举报
回复

楼主如果觉得字段多,写着麻烦
可以试试采用
sp_help '表名'
简化书写过程
feixianxxx 2010-04-20
  • 打赏
  • 举报
回复
如果你的那些列没有索引 这样写就可以了
如果你的列上都有索引 这样写会失去索引效果 所以介意将or改成union 的写法
vsts2010 2010-04-20
  • 打赏
  • 举报
回复
union或者拼sql可能会更慢呢,似乎没有更好的方案。

感觉如果有这样的查询需求的话,从一开始就设计为两张表更好一些,把这些列传为对应的行,就不存在楼主的问题了。
bestzrz 2010-04-20
  • 打赏
  • 举报
回复
楼主不是想优化语句的性能,是想用最少的字符写出后面的过滤条件
cocu6216 2010-04-20
  • 打赏
  • 举报
回复
加索引啊
sun403 2010-04-20
  • 打赏
  • 举报
回复
最快了
csproj 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xu770 的回复:]
用UNION ALL吧
如果数据多的话可以把where后面的字段加上索引快很多的
[/Quote]
UNION ALL 会把1条数据变成N条数据
比如p_Boss 和 p_lBoss 都等于111

用UNION 不知道会不会优化,估计效率会比原来的方法低,
xu770 2010-04-20
  • 打赏
  • 举报
回复
用UNION ALL吧
如果数据多的话可以把where后面的字段加上索引快很多的
喜-喜 2010-04-20
  • 打赏
  • 举报
回复
没办法优化了..
kk297173176 2010-04-20
  • 打赏
  • 举报
回复
嗯 谢谢你们。
主要是用的多,sql语句太长了,我想着看能否优化一下写短点。
如果不能了就把相同的给一个变量,拼sql语句

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧