求一段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查询, 怎么用程序进行优化, 语句效果不变
...全文
84 点赞 收藏 15
写回复
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%'
回复 点赞
发动态
发帖子
疑难问题
创建于2007-09-28

9308

社区成员

12.1w+

社区内容

MS-SQL Server 疑难问题
社区公告
暂无公告