就是下边这段代码:
_ConnectionPtr m_pConn;
_RecordsetPtr m_pSetg;
m_pConn.CreateInstance(__uuidof(Connection));
m_pSetg.CreateInstance(__uuidof(Recordset));
m_pConn->Open("Provider=SQLOLEDB;Data Source=CHINAVAS;Initial Catalog=TelQQMY; User ID=sa;Password=;","","",NULL);
CString strSqlg;
strSqlg.Format("select * from voicemail where delstatus = 1 and outstatus = 0 order by lsh asc");
BSTR strSQLg=strSqlg.AllocSysString();
m_pSetg->Open(strSQLg,(IDispatch*)m_pConn,adOpenDynamic,adLockOptimistic,adCmdText);
strSqlg.Empty();
if( m_pSetg->adoEOF && m_pSetg->BOF )//发送用户点歌和用户语音短信!
{
if( m_pSetg->State )
{
m_pSetg->Close();
}
if( m_pConn->State )
{
m_pConn->Close();
}
delete [] send;
delete [] tmpno;
return;
}
else
{
m_pSetg->MoveFirst();
}
for( SendTrunk; SendTrunk < MAXSENDTRUNK; SendTrunk++ )
{
if( ! m_pSetg->adoEOF)
{
if( (TRK_FREE == Trunk[SendTrunk].State)&&( ISUP_CH_FREE == DJISUP_GetChnState( SendTrunk/30, SendTrunk%30)) )
{
tmp = m_pSetg->GetCollect(_variant_t( "sendto" ));
tmplsh = m_pSetg->GetCollect(_variant_t( "lsh" ));
lsht = tmplsh.lVal;
strcpy(send,(char*)(_bstr_t)tmp);
len = strlen(send);
if( len < 8 )
{
if( yzGetTelByQQ( atoi(send),tmpno ) )
{
strcpy(Trunk[SendTrunk].callerno,tmpno);
strcpy(Trunk[SendTrunk].callee,(char*)(_bstr_t)m_pSetg->GetCollect(_variant_t("caller")));
strcpy(Trunk[SendTrunk].filename,(char*)(_bstr_t)m_pSetg->GetCollect(_variant_t("vm_dir")));
Trunk[SendTrunk].lsh = lsht;
temp = Trunk[SendTrunk].callee;
if( temp.Find('F') > 0 )
{
temp.Delete( 0, 12 );
strcpy( Trunk[SendTrunk].callee , temp.GetBuffer(0) );
temp.Empty();
Trunk[SendTrunk].voice_type = 2;
}
else
{
Trunk[SendTrunk].voice_type = 1;
}
Trunk[SendTrunk].State = TRK_MESSAGE_SENDING_CALLOUT;
yzSendMessageProcess( lsht);
m_pSetg->MoveNext();
}
else
{
// strcpy( tmpno, (char*)(_bstr_t)m_pSetg->GetCollect(_variant_t( "vm_dir" )));
yzSendMessageFailed(lsht);
m_pSetg->MoveNext();
}
}
else if( (len >= 8)&&(len <= 12))
{
strcpy(Trunk[SendTrunk].callerno,send);
strcpy(Trunk[SendTrunk].callee,(char*)(_bstr_t)m_pSetg->GetCollect(_variant_t("caller")));
strcpy(Trunk[SendTrunk].filename,(char*)(_bstr_t)m_pSetg->GetCollect(_variant_t("vm_dir")));
temp = Trunk[SendTrunk].callee;
if( temp.Find('F') > 0 )
{
temp.Delete( 0, 12 );
strcpy( Trunk[SendTrunk].callee , temp.GetBuffer(0) );
temp.Empty();
Trunk[SendTrunk].voice_type = 2;
}
else
{
Trunk[SendTrunk].voice_type = 1;
}
yzSendMessageProcess( lsht);
m_pSetg->MoveNext();
}
else
{
yzSendMessageFailed(lsht);
m_pSetg->MoveNext();
}
}
}
else
{
break;
}
}
delete [] send;
delete [] tmpno;
return;
9 个解决方案
#1
无从下手啊,是数据库查询open时耗cpu还是查询完成结束之后啊
#2
应该是数据库open时,比较费时!
#3
应该使用或,而不是与,试试:
if( m_pSetg->adoEOF || m_pSetg->BOF )//发送用户点歌和用户语音短信!
if( m_pSetg->adoEOF || m_pSetg->BOF )//发送用户点歌和用户语音短信!
#4
如果是open的问题,你把sql语句单独执行一下,看看执行时间,如果问题出在这估计是你的where条件的字段的问题
#5
查查是不是没有index。
#6
这个表数据变化很大,所以用index不合算吧!
#7
我刚才试了执行那个SQL语句,的确很费时间,怎么办
#8
mark
同问
我以前做的程序用的是oracle,也是开库的时候比较慢,不知道为什么?
是不是和数据库的设置有关系?
同问
我以前做的程序用的是oracle,也是开库的时候比较慢,不知道为什么?
是不是和数据库的设置有关系?
#9
我分析了一下,以下几个原因
1. 表记录数较多,而且没有索引,速度肯定受影响,如果这个表不会非常频繁的插入删除的话,建议加一个索引。(即使频繁插入,在10万条记录情况下更新索引耗费的时间我觉得应该可以承受,你可以试验一下)
2. 表如果操作频繁,是否进行重新组织操作,我sqlserver不太熟,不知如何操作,类似于windows下的磁盘碎片整理。
3. 筛选条件,看你的筛选结果与与总记录数,对比一下,如果10万条筛选万还剩7万条的话,那么即使加了索引也不会使用索引了,此时可以适当调整数据库设计,对你这条语句,可以干脆不加条件,取出来后用程序删除。
1. 表记录数较多,而且没有索引,速度肯定受影响,如果这个表不会非常频繁的插入删除的话,建议加一个索引。(即使频繁插入,在10万条记录情况下更新索引耗费的时间我觉得应该可以承受,你可以试验一下)
2. 表如果操作频繁,是否进行重新组织操作,我sqlserver不太熟,不知如何操作,类似于windows下的磁盘碎片整理。
3. 筛选条件,看你的筛选结果与与总记录数,对比一下,如果10万条筛选万还剩7万条的话,那么即使加了索引也不会使用索引了,此时可以适当调整数据库设计,对你这条语句,可以干脆不加条件,取出来后用程序删除。
#1
无从下手啊,是数据库查询open时耗cpu还是查询完成结束之后啊
#2
应该是数据库open时,比较费时!
#3
应该使用或,而不是与,试试:
if( m_pSetg->adoEOF || m_pSetg->BOF )//发送用户点歌和用户语音短信!
if( m_pSetg->adoEOF || m_pSetg->BOF )//发送用户点歌和用户语音短信!
#4
如果是open的问题,你把sql语句单独执行一下,看看执行时间,如果问题出在这估计是你的where条件的字段的问题
#5
查查是不是没有index。
#6
这个表数据变化很大,所以用index不合算吧!
#7
我刚才试了执行那个SQL语句,的确很费时间,怎么办
#8
mark
同问
我以前做的程序用的是oracle,也是开库的时候比较慢,不知道为什么?
是不是和数据库的设置有关系?
同问
我以前做的程序用的是oracle,也是开库的时候比较慢,不知道为什么?
是不是和数据库的设置有关系?
#9
我分析了一下,以下几个原因
1. 表记录数较多,而且没有索引,速度肯定受影响,如果这个表不会非常频繁的插入删除的话,建议加一个索引。(即使频繁插入,在10万条记录情况下更新索引耗费的时间我觉得应该可以承受,你可以试验一下)
2. 表如果操作频繁,是否进行重新组织操作,我sqlserver不太熟,不知如何操作,类似于windows下的磁盘碎片整理。
3. 筛选条件,看你的筛选结果与与总记录数,对比一下,如果10万条筛选万还剩7万条的话,那么即使加了索引也不会使用索引了,此时可以适当调整数据库设计,对你这条语句,可以干脆不加条件,取出来后用程序删除。
1. 表记录数较多,而且没有索引,速度肯定受影响,如果这个表不会非常频繁的插入删除的话,建议加一个索引。(即使频繁插入,在10万条记录情况下更新索引耗费的时间我觉得应该可以承受,你可以试验一下)
2. 表如果操作频繁,是否进行重新组织操作,我sqlserver不太熟,不知如何操作,类似于windows下的磁盘碎片整理。
3. 筛选条件,看你的筛选结果与与总记录数,对比一下,如果10万条筛选万还剩7万条的话,那么即使加了索引也不会使用索引了,此时可以适当调整数据库设计,对你这条语句,可以干脆不加条件,取出来后用程序删除。