求一段SQL规律, 或者代码. 求各位老大们帮帮忙...

luozhangwen 2012-06-11 05:03:22
例如:
( ( a = '' and b = '') or (c like '' and d= '') ) or ( e = '' and c ='')

SQL条件是不确定比较复杂的字符串, 但是中间有些text的字段用like查询非常慢,

如C是大字段like查询, 怎么用程序进行优化, 语句效果不变
...全文
121 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2012-06-11
  • 打赏
  • 举报
回复
如果你用的是2005以后的SQLServer,可以考虑使用“全文检索”,可以不用考虑like带来的性能问题。
lycorisraya 2012-06-11
  • 打赏
  • 举报
回复
select * from a (
select * from a where a = 1
)t where b like '%aa%'

这是什么写法?另外如果能用等号过滤掉一些数据的话就先把这部分数据保存到一个临时表或者一个CTE中,然后再用like查询,这样,效率应该话高一些。
黄_瓜 2012-06-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

select * from a (
select * from a where a = 1
)t where b like '%aa%'

如:
原数据记录: 100W条
使用 select * from a where a = 1 后数据为10条.
然后使用模糊 b like '%aa%' 速度肯定会提高很多的
[/Quote]

select * from a where a = 1
AND b like '%aa%'

一样的。
叶子 2012-06-11
  • 打赏
  • 举报
回复
从SQL SERVER 2005开始就有类似提示了:

Important
ntext , text, and image data types will be removed in a future version of Microsoft SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead.
xinya7777 2012-06-11
  • 打赏
  • 举报
回复
or like 都是元凶。。。
必要的情况下建议试试UNION 如果表数据大,但是结果集不大的情况下,可能会有效,
另外用UNION 在涉及到LIKE 的条件全部放后面,等于的放前面,可能也有效果,再就是LIKE
能用一个%就尽量不要用双%%,单%like还是能利用上索引的
haitao 2012-06-11
  • 打赏
  • 举报
回复
现在的sql引擎,优化能力不错

但是也有犯傻的时候,而且无法阻止它的“优化”。。。。。除了使用临时表存储中间结果
昵称被占用了 2012-06-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
select * from a (
select * from a where a = 1
)t where b like '%aa%'

如:
原数据记录: 100W条
使用 select * from a where a = 1 后数据为10条.
然后使用模糊 b like '%aa%' 速度肯定会提高很多的
[/Quote]

会自动优化的,效果与

select * from a where a = 1
AND b like '%aa%'


luozhangwen 2012-06-11
  • 打赏
  • 举报
回复
select * from a (
select * from a where a = 1
)t where b like '%aa%'

如:
原数据记录: 100W条
使用 select * from a where a = 1 后数据为10条.
然后使用模糊 b like '%aa%' 速度肯定会提高很多的
孤独加百列 2012-06-11
  • 打赏
  • 举报
回复
like '%aa%'不走索引没什么好办法优化的,对于text类型的可以考虑全文索引速度会快,但是准确性会差点。
luozhangwen 2012-06-11
  • 打赏
  • 举报
回复
... 这只是一个规律.
昵称被占用了 2012-06-11
  • 打赏
  • 举报
回复
增加索引
(A,B)
(D,C)
(E,C)
昵称被占用了 2012-06-11
  • 打赏
  • 举报
回复
上面语句有效?什么数据库?
luozhangwen 2012-06-11
  • 打赏
  • 举报
回复
如:
select * from a where a = 1 and b like '%aa%'

改成:
select * from a (
select * from a where a = 1
)t where b like '%aa%'

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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