请教:如何优化SQL语句提高运行效率和速度?

现在有两个表gkbmk和gktjk,我现在需要查询gkbmk中有而gktjk中没有的记录,两个表的联系字段为bmh,查询代码:dimwhereifbmd1<>""then... 现在有两个表gkbmk和gktjk,我现在需要查询gkbmk中有而gktjk中没有的记录,两个表的联系字段为bmh,查询代码:
dim where
if bmd1 <> "" then
where = where + " and bmd='"&bmd1&"' and bmh not in (select bmh from gktjk where bmd='"&bmd1&"')"
end if
if bj1 <> "" then
where = where + " and yhdy='"&bj1&"' and bmh not in (select bmh from gktjk where yhdy='"&bj1&"')"
end if
if gknf1 <> "" then
where = where + " and gknf='"&gknf1&"' and bmh not in (select bmh from gktjk where gknf='"&gknf1&"')"
end if
sql="select bmh,xm,xb,yhdy,bmd,sfzh,gknf from [gkbmk] where 1=1" + where + " order by gknf desc,bmh asc"
Set objRs=Conn.Execute("Select count(*) From gkbmk where 1=1" & where )'/*记录统计
Set rs= Server.CreateObject("ADODB.Recordset")
rs.open sql,conn,1,1

现在的问题是:数据量小的时候没问题,当gkbmk和gktjk中某个报名点(bmd)某年(gknf)的数据比较大的时候,运行会特别慢,要怎样优化代码来提高查询效率和速度?
展开
 我来答
ykzhen
2013-05-23 · TA获得超过5298个赞
知道大有可为答主
回答量:1303
采纳率:0%
帮助的人:1153万
展开全部
首先不能用子查询,这样会很慢很慢。
用外连接的关联查询代替not in
如下:
select a.* from gkbmk a left join gktjk b on a.bmh = b.bmh
where b.bmh is null;
如果不了解外连接,先了解一下吧,呵呵。
索引适当加一点,就可以了,我的句子已经是最佳优化了,你可以在上面加入你需要的条件。
youbl
2013-05-16 · TA获得超过2510个赞
知道大有可为答主
回答量:1844
采纳率:62%
帮助的人:1639万
展开全部
建索引,
gkbmk和gktjk两个表,各加3个索引
1、bmd的索引
2、yhdy的索引
3、gknf的索引
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百味人生独自行
2013-05-16 · TA获得超过242个赞
知道小有建树答主
回答量:819
采纳率:0%
帮助的人:421万
展开全部
sql server 2005中有个,优化向导,可以优化sql语句,你把你的sql代码贴到里面,运行下优化向导,按它给出的建议做吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jay_chou707
2013-05-16
知道答主
回答量:19
采纳率:0%
帮助的人:9.1万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式