数据库有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多次才能出结果,程序运行极慢,请问有什么办法能让我加快查询速度呢?大家都说说吧,谢谢啦。

解决方案 »

  1.   

    提取不了了,得马上把查询的结果计算出来,释放资源,以便进行下一次查询,因为要进行多次查询.
    还有就是有一个查询的结果一次就得到了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万多条记录,程序运行到这个循环就死掉了(没响应),怎么办呢?
    拜托啦?谁有处理超大数据集的经验啊?