数据库有42个属性,50万条记录。为了提高查询效率,我已经在每个属性上建了索引,并在最常用到的type属性上建了Cluster索引。程序中用ADO连接SQL Server2000数据库,最常用的语句如下:
//计算P(x_dst_host_same_src_port_rate|C0)----连续属性
//计算类C0上训练样本属性dst_host_same_src_port_rate的平均值AvgDstHostSameSrcPortRateC0
sprintf(Sql,"select AVG(dst_host_same_src_port_rate) from Kddcup_data_10_percent where type = '%s' ", TypeName[j]);
_variant_t SqlExecutedDstHostSameSrcPortRateC0_1(Sql);
m_pRecordset->PutRefActiveConnection(m_pConnection);
m_pRecordset->Open(SqlExecutedDstHostSameSrcPortRateC0_1, vtMissing, adOpenStatic, adLockReadOnly, adCmdText);
_variant_t vAvgDstHostSameSrcPortRateC0 = m_pRecordset->GetCollect(_variant_t((long)0));
double AvgDstHostSameSrcPortRateC0 = vAvgDstHostSameSrcPortRateC0.dblVal;
m_pRecordset->Close();
//计算类C0上训练样本属性dst_host_same_src_port_rate的标准差DiffDstHostSameSrcPortRateC0
sprintf(Sql,"select dst_host_same_src_port_rate from Kddcup_data_10_percent where type = '%s' ", TypeName[j]);
_variant_t SqlExecutedDstHostSameSrcPortRateC0_2(Sql);
m_pRecordset->PutRefActiveConnection(m_pConnection);
m_pRecordset->Open(SqlExecutedDstHostSameSrcPortRateC0_2, vtMissing, adOpenStatic, adLockReadOnly, adCmdText);
double TempDiffDstHostSameSrcPortRateC0 = 0.00;
double CountDstHostSameSrcPortRateC0 = 0;
while(!m_pRecordset->adoEOF)
{
_variant_t vDstHostSameSrcPortRateC0 = m_pRecordset->GetCollect("dst_host_same_src_port_rate");
double DstHostSameSrcPortRateC0 = vDstHostSameSrcPortRateC0.dblVal;
TempDiffDstHostSameSrcPortRateC0 = TempDiffDstHostSameSrcPortRateC0 + pow((DstHostSameSrcPortRateC0 - AvgDstHostSameSrcPortRateC0),2);
CountDstHostSameSrcPortRateC0++;
m_pRecordset->MoveNext();
}
double DiffDstHostSameSrcPortRateC0 = sqrt(TempDiffDstHostSameSrcPortRateC0/(CountDstHostSameSrcPortRateC0-1));
m_pRecordset->Close();和以上语句相似的语句要执行总共800多次才能出结果,程序运行极慢,请问有什么办法能让我加快查询速度呢?大家都说说吧,谢谢啦。
//计算P(x_dst_host_same_src_port_rate|C0)----连续属性
//计算类C0上训练样本属性dst_host_same_src_port_rate的平均值AvgDstHostSameSrcPortRateC0
sprintf(Sql,"select AVG(dst_host_same_src_port_rate) from Kddcup_data_10_percent where type = '%s' ", TypeName[j]);
_variant_t SqlExecutedDstHostSameSrcPortRateC0_1(Sql);
m_pRecordset->PutRefActiveConnection(m_pConnection);
m_pRecordset->Open(SqlExecutedDstHostSameSrcPortRateC0_1, vtMissing, adOpenStatic, adLockReadOnly, adCmdText);
_variant_t vAvgDstHostSameSrcPortRateC0 = m_pRecordset->GetCollect(_variant_t((long)0));
double AvgDstHostSameSrcPortRateC0 = vAvgDstHostSameSrcPortRateC0.dblVal;
m_pRecordset->Close();
//计算类C0上训练样本属性dst_host_same_src_port_rate的标准差DiffDstHostSameSrcPortRateC0
sprintf(Sql,"select dst_host_same_src_port_rate from Kddcup_data_10_percent where type = '%s' ", TypeName[j]);
_variant_t SqlExecutedDstHostSameSrcPortRateC0_2(Sql);
m_pRecordset->PutRefActiveConnection(m_pConnection);
m_pRecordset->Open(SqlExecutedDstHostSameSrcPortRateC0_2, vtMissing, adOpenStatic, adLockReadOnly, adCmdText);
double TempDiffDstHostSameSrcPortRateC0 = 0.00;
double CountDstHostSameSrcPortRateC0 = 0;
while(!m_pRecordset->adoEOF)
{
_variant_t vDstHostSameSrcPortRateC0 = m_pRecordset->GetCollect("dst_host_same_src_port_rate");
double DstHostSameSrcPortRateC0 = vDstHostSameSrcPortRateC0.dblVal;
TempDiffDstHostSameSrcPortRateC0 = TempDiffDstHostSameSrcPortRateC0 + pow((DstHostSameSrcPortRateC0 - AvgDstHostSameSrcPortRateC0),2);
CountDstHostSameSrcPortRateC0++;
m_pRecordset->MoveNext();
}
double DiffDstHostSameSrcPortRateC0 = sqrt(TempDiffDstHostSameSrcPortRateC0/(CountDstHostSameSrcPortRateC0-1));
m_pRecordset->Close();和以上语句相似的语句要执行总共800多次才能出结果,程序运行极慢,请问有什么办法能让我加快查询速度呢?大家都说说吧,谢谢啦。
解决方案 »
- 如何创建MFC规则DLL?
- ATL开发数据库组件的问题
- 单文档或多文档框架如何让它初始是最大化?
- FFT测试数据
- Tomcat不装载驱动问题,请大家帮忙, 急!!!!!!!!!!!
- 关于ComboBox的问题:在vc6中使用此控件时无法显示下拉内容,但使用代码生成却可以.请问这是怎么回事?有办法解决吗?
- DEBUG程序为什么不能执行?
- MFC ListCtrl 控件怎么实现子项编辑功能,要用键盘上下左右可以移动
- VC调试时出现错误“User breakpoint called from code at 0x77f9f9df”
- dll做内存共享,报错〖8〗-存储空间不足
- 如何访问内网中的一台机器?
- 求vc环境下用opengl描绘复杂地形
还有就是有一个查询的结果一次就得到了10万多条记录,程序运行到那里就死掉了,可能是占用太多资源的缘故吧,怎么才能解决这个问题呢?就是下面这个:
while(!m_pRecordset->adoEOF)
{
_variant_t vDstHostSameSrcPortRateC0 = m_pRecordset->GetCollect("dst_host_same_src_port_rate");
double DstHostSameSrcPortRateC0 = vDstHostSameSrcPortRateC0.dblVal;
TempDiffDstHostSameSrcPortRateC0 = TempDiffDstHostSameSrcPortRateC0 + pow((DstHostSameSrcPortRateC0 - AvgDstHostSameSrcPortRateC0),2);
CountDstHostSameSrcPortRateC0++;
m_pRecordset->MoveNext();
}
m_pRecordset里面有10万多条记录,程序运行到这个循环就死掉了(没响应),怎么办呢?
拜托啦?谁有处理超大数据集的经验啊?