怎么提高SQL查询速度(我是用ODBC)连接远程数据库

whyfine0825521 2007-03-29 08:26:48
我们这里用ASP程序编程,用ODBC数据源连接远程数据库,从其数据库里取值,再进行判断,如我们数据库内有远程连接数据库中的记录,就不增加,如果没有就增加进我方数据库.但此时出现ODBC连接超时问题,我用了Server.ScriptTimeOut=360000这个语句也不起作用,远程查询一个表数据,这个表内数据有6万条.
请各位大侠同仁帮帮我
...全文
459 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
szhenrylee 2011-01-19
  • 打赏
  • 举报
回复
不错,帮顶!
gdgf 2007-04-01
  • 打赏
  • 举报
回复
根据你的查询条件,建立合适的索引,甚至考虑更换字段重建簇索引
xvjie2002 2007-03-30
  • 打赏
  • 举报
回复
建议使用以下这个在存储过程(用于分页记录)
CREATE PROCEDURE SelectPageBySingleTable

@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)

AS

declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型


if @doCount != 0 begin

if @strWhere !=''
set @strSQL = "select count(*) as Total from [" + @tblName + "] where "+@strWhere
else
set @strSQL = "select count(*) as Total from [" + @tblName + "]"

end else begin

if @OrderType != 0 begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @fldName +"] desc"
--如果@OrderType不是0,就执行降序,这句很重要!
end else begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @fldName +"] asc"
end

if @PageIndex = 1 begin
if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from [" + @tblName + "] where " + @strWhere + " " + @strOrder

else
set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["+ @tblName + "] "+ @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end else begin
--以下代码赋予了@strSQL以真正执行的SQL代码

set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["+ @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"+ @strOrder

if @strWhere != ''

set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @fldName + "] from [" + @tblName + "] where " + @strWhere + " "
+ @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder

end
end
print @strSQL
exec (@strSQL)
GO
simonhehe 2007-03-30
  • 打赏
  • 举报
回复
cinvccode <> '0904'and cinvccode <> '0905' and cinvccode<>'0907'



--这样你的select一个什么样的结果集???
tanjun132 2007-03-29
  • 打赏
  • 举报
回复
不懂,帮顶!
whyfine0825521 2007-03-29
  • 打赏
  • 举报
回复
总是提示odbc连接超时
whyfine0825521 2007-03-29
  • 打赏
  • 举报
回复
就是个简单的判断增加程序
whyfine0825521 2007-03-29
  • 打赏
  • 举报
回复

<%
Server.ScriptTimeOut=36000




name="SELECT cInvCode AS code,cInvName as name, cInvStd as gg ,cenglishname as eng ,cciqcode as ccode FROM cInvenptrd where left(cInvCCode,2)='09' and cinvccode <> '0904'and cinvccode <> '0905' and cinvccode<>'0907' order by cInvCode"
Set rs1 = Server.CreateObject("ADODB.Recordset")
rs1.Open name, conn, 3,1
i=1
if not rs1.eof then
rs1.movefirst
do while not rs1.eof

code1=trim(rs1.fields("code").value)
name1=trim(rs1.fields("name").value)
gg1=trim(rs1.fields("gg").value)
eng1=trim(rs1.fields("eng").value)
ccode1=trim(rs1.fields("ccode").value)



user0="select count(*) as jl from ptrdcode where cinvcode='"&code1&"' "
set user1=conn3.execute(user0)
jl=trim(user1("jl"))
if jl=0 then

sqll="Insert Into ptrdode (cinvcode,cinvname,cinvstd,cienglish,cciqcode) Values ('"&code1& " ','" &name1&" ','"&gg1&" ' ,'"&eng1&" ' ,'"&ccode1&" ' ) "
conn3.Execute sqll
end if

rs1.movenext
i=i+1
loop
end if
rs1.close

%>

simonhehe 2007-03-29
  • 打赏
  • 举报
回复
1.优化数据库的索引
2.把你的操作改为存储过程
能告诉我怎么实现这两个功能呀,我们是菜鸟,帮帮忙很急的,谢谢
-----------------------------------------------------
:-) 如果很菜,那就只有看书了,或者你可以把sql语句之类的放到网上讨论
让大家看看
simonhehe 2007-03-29
  • 打赏
  • 举报
回复
如果不是因为ODBC的连接问题,你可以优化你的表索引或查询语句
whyfine0825521 2007-03-29
  • 打赏
  • 举报
回复
1.优化数据库的索引
2.把你的操作改为存储过程
能告诉我怎么实现这两个功能呀,我们是菜鸟,帮帮忙很急的,谢谢
CathySun118 2007-03-29
  • 打赏
  • 举报
回复
1.优化数据库的索引
2.把你的操作改为存储过程

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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