大哥们请进,一个优化问题。

yms_wangxm 2008-04-11 08:35:20
select title,gongneng,chengfen,maidian,shenhe,[date],id from cp 
where
shenhe = '已审核'
and title like '%"+function.getStr(title)+"%'
or gongneng like '%"+function.getStr(title)+"%'
order by title


100万条数据跑了130秒,怎么优化,还能提高效率吗,建立索引了,
...全文
117 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wklilong 2008-04-12
  • 打赏
  • 举报
回复
谢谢各位的帮助,看了各位的回复,我总结了一下就是 基本上提高不了什么 效率了
所以我比较支持1楼的朋友,应该修改下程序 而不要在这个sql上做文章了
我很抱歉 没有写明function.getStr(title)函数的意思
function.getStr(title) 只是一个编码函数 没有任何其他作用
不好意思
小明结贴吧
viva369 2008-04-11
  • 打赏
  • 举报
回复
2005里在没有做表连接的情况下,union操作符只会增加表的扫描计数,所以理论上说效率只有低下。
+索引是必须的,最起码可以加在titile列上,执行有序扫描,别的觉得没什么可以优化的~
但lz什么样的查询要返回100万的数据,估计全部返回也要相当长的一段时间


-晴天 2008-04-11
  • 打赏
  • 举报
回复
alter table cp add searchcolumn nvarchar(50)
go
CREATE NONCLUSTERED INDEX IX_cp ON dbo.cp(searchcolumn) ON [PRIMARY]
go
update cp set searchcolumn=function.getStr(title)
go
select title,gongneng,chengfen,maidian,shenhe,[date],id from cp
where
shenhe = '已审核'
and title like '%"+searchcolumn+"%'
or gongneng like '%"+searchcolumn+"%'
order by title
-晴天 2008-04-11
  • 打赏
  • 举报
回复

alter table cp add searchcolumn nvarchar(50)
go
CREATE NONCLUSTERED INDEX IX_cp ON dbo.tb0(searchcolumn) ON [PRIMARY]
go
update cp set searchcolumn=function.getStr(title)
go
select title,gongneng,chengfen,maidian,shenhe,[date],id from cp
where
shenhe = '已审核'
and title like '%"+searchcolumn+"%'
or gongneng like '%"+searchcolumn+"%'
order by title
yms_wangxm 2008-04-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 perfectaction 的回复:]
shenhe上建立索引无非是想让 shenhe = '已审核' 利用上索引

但你的是shenhe = '已审核' and title like '%"+变量+"%' or gongneng like '%"+变量+"%'
而不是shenhe = '已审核' and (title like '%"+变量+"%' or gongneng like '%"+变量+"%')
,加不加没有什么两样,都需要全表扫一次

用索引提高效率,不现实
[/Quote]
谢谢你的建议,
nzperfect 2008-04-11
  • 打赏
  • 举报
回复
shenhe上建立索引无非是想让 shenhe = '已审核' 利用上索引

但你的是shenhe = '已审核' and title like '%"+变量+"%' or gongneng like '%"+变量+"%'
而不是shenhe = '已审核' and (title like '%"+变量+"%' or gongneng like '%"+变量+"%')
,加不加没有什么两样,都需要全表扫一次

用索引提高效率,不现实
yms_wangxm 2008-04-11
  • 打赏
  • 举报
回复
为什么要在shenhe上建立索引呀,我才接触不怎么明白。。
yms_wangxm 2008-04-11
  • 打赏
  • 举报
回复
function.getStr(title),

是一个获取字段的函数
yinqi025 2008-04-11
  • 打赏
  • 举报
回复
是的...
在shenhe字段上建个索引
select title,gongneng,chengfen,maidian,shenhe,[date],id from cp
where
shenhe = '已审核'
and title like '%"+function.getStr(title)+"%'

UNION ALL

select title,gongneng,chengfen,maidian,shenhe,[date],id from cp
where
shenhe = '已审核'
and gongneng like '%"+function.getStr(title)+"%"
还有不知道你的getStr函数做了什么事,建设弄个全文索引...
pt1314917 2008-04-11
  • 打赏
  • 举报
回复

select title,gongneng,chengfen,maidian,shenhe,[date],id from cp
where
shenhe = '已审核'
and title like '%"+function.getStr(title)+"%'
or gongneng like '%"+function.getStr(title)+"%'
order by title
---------------------------------------

function.getStr(title),不知道这是个函数还是什么。
但有一点可以肯定的是,在SQL语句中两次用到这个函数,这样效率就会降低,起码楼主可以先将function.getStr(title)的返回值赋给一个变量。然后将SQL语句改成:
select title,gongneng,chengfen,maidian,shenhe,[date],id from cp
where
shenhe = '已审核'
and title like '%"+变量+"%'
or gongneng like '%"+变量+"%'
order by title

kelph 2008-04-11
  • 打赏
  • 举报
回复
你这样查询,索引是不起作用的。
你应该做设计上的优化,而不是查询上的

34,576

社区成员

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

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