求解一条类似DISTINCT效果的语句

Cjlu_A 2009-09-16 03:26:13
select * from View_data t where ([CompanyName] like '%limited' or [Email] like '%cn') and not exists(select 1 from View_data where CompanyName=t.CompanyName and [AutoID] >t.[AutoID])

这条数据执行的速度超慢...有没有快一点的写法

就是 一个库里存有公司的产品信息 一条数据是由公司加产品组成
现在要根据[CompanyName] like '%limited' or [Email] like '%cn' 检索出满足条件的数据
因为公司对应了N个产品 所以简单的SELECT出来有很多重复的公司信息 现在的要求是只要不重复的公司信息
所以就用了上面的语句 但是执行时间超长... 有没有什么快速一点的查询方法
...全文
120 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
david0927cs2006 2009-09-16
  • 打赏
  • 举报
回复
关注一下
dawugui 2009-09-16
  • 打赏
  • 举报
回复
select * from View_data t where ([CompanyName] like '%limited' or [Email] like '%cn') and not exists(select 1 from View_data where ([CompanyName] like '%limited' or [Email] like '%cn') and CompanyName=t.CompanyName and [AutoID] >t.[AutoID]) 
Cjlu_A 2009-09-16
  • 打赏
  • 举报
回复
90W条数据...一刻钟过去了 还在继续
xiequan2 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 cjlu_a 的回复:]
select * from View_data t where ([CompanyName] like '%limited' or [Email] like '%cn') and not exists(select 1 from View_data where CompanyName=t.CompanyName and [AutoID] >t.[AutoID])

这条数据执行的速度超慢...有没有快一点的写法

就是 一个库里存有公司的产品信息 一条数据是由公司加产品组成
现在要根据[CompanyName] like '%limited' or [Email] like '%cn' 检索出满足条件的数据
因为公司对应了N个产品 所以简单的SELECT出来有很多重复的公司信息 现在的要求是只要不重复的公司信息
所以就用了上面的语句 但是执行时间超长... 有没有什么快速一点的查询方法
[/Quote]

select * from View_data t where ([CompanyName] like '%limited' or [Email] like '%cn')
and [AutoID]= (select max([AutoID]) from View_data where [CompanyName] like '%limited' or [Email] like '%cn' and CompanyName=t.CompanyName)
--小F-- 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 guguda2008 的回复:]
([CompanyName] like '%limited' or [Email] like '%cn')
这句应该可以优化
CompanyName和Email列各加一个REVERSE的计算列,计算列上加索引,然后把上面那个条件改成 LIKE 'NC%'这样的形式
[/Quote]
or连接的字段不能使用索引
guguda2008 2009-09-16
  • 打赏
  • 举报
回复
([CompanyName] like '%limited' or [Email] like '%cn')
这句应该可以优化
CompanyName和Email列各加一个REVERSE的计算列,计算列上加索引,然后把上面那个条件改成 LIKE 'NC%'这样的形式
--小F-- 2009-09-16
  • 打赏
  • 举报
回复
or连接的字段也用不了索引 可以考虑用union all 代替试下
aoyihuashao 2009-09-16
  • 打赏
  • 举报
回复
我这种的一般都不写后面那段,用的max(列名)

select 列1,max(列2) from View_data t where ([CompanyName] like '%limited' or [Email] like '%cn') group by 列1

至于快慢,没深究过,你试试看。
htl258_Tony 2009-09-16
  • 打赏
  • 举报
回复
[CompanyName] like '%limited' or [Email] like '%cn'

这样的查询索引也用不到,只能考虑全文索引了
Zoezs 2009-09-16
  • 打赏
  • 举报
回复
AutoID上也需要建索引
Zoezs 2009-09-16
  • 打赏
  • 举报
回复

select * from View_data t where ([CompanyName] like '%limited' or [Email] like '%cn') and not exists(select 1 from View_data where CompanyName=t.CompanyName and [AutoID] >t.[AutoID])

你使用的是like本来效率就不怎么样,在CompanyName上都建上索引吧。

34,588

社区成员

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

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