Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的MySQL+;慢跑_C++_Mysql_Odbc - Fatal编程技术网

C++ C+中的MySQL+;慢跑

C++ C+中的MySQL+;慢跑,c++,mysql,odbc,C++,Mysql,Odbc,我们有MySQL数据库。我们试图用C++代码连接ODBC驱动程序连接到这个MySQL数据库。我们使用的ODBC驱动程序是3.51版 数据库结构如下: 我们在数据库D1中有一个会话表CONV_X1,其中包含客户端和服务器机器的IP地址以及与此会话对应的数据,格式如下: HostCounter1 HostCounter2 value1 value2 from_unixtime(timestamp) 10.0.0.1:10.0.0.2_ftp_InOctets_CONV_X1 10.0.0.2:10.

我们有MySQL数据库。我们试图用C++代码连接ODBC驱动程序连接到这个MySQL数据库。我们使用的ODBC驱动程序是3.51版

数据库结构如下: 我们在数据库D1中有一个会话表CONV_X1,其中包含客户端和服务器机器的IP地址以及与此会话对应的数据,格式如下:

HostCounter1 HostCounter2 value1 value2 from_unixtime(timestamp)
10.0.0.1:10.0.0.2_ftp_InOctets_CONV_X1 10.0.0.2:10.0.0.1_ftp_InOctets_CONV_X1 0 1.741e+006 1310121900(in unix format)
10.0.0.1:10.0.0.2_udp_InOctets_CONV_X1 10.0.0.2:10.0.0.1_udp_InOctets_CONV_X1 0 1.741e+006
ProtocolID ServerID ClientID时间戳InOctets OutOctets

     24  167772161  167772162  1310121900         0  1.741e+006 
    632  167772161  167772162  1310121900         0  1.741e+006 
     24  167772161  167772162  1310122800         0    1.8e+006 
我们在另一个数据库D2中有另一个表PROT_NAME,该数据库D2包含此协议ID的信息。我们正在将数据库D1中CONV_X1表的ProtocolID映射到数据库D2中的PROT_NAME表,以获取协议名称

从信息模式中,表名CONV_X1被视为D1中可能有多个具有相同名称、具有不同ID的表(例如,CONV_X1、CONV_X2等)

我们正在以以下格式从该数据库提取数据

ServerID:ClientID_ProtocolName_InOctets_tableName
ClientID:ServerID_ProtocolName_InOctets_tableName 
因此,对于1310121900时间戳,我们正在处理的数据的格式如下

10.0.0.1:10.0.0.2_ftp_InOctets_CONV_X1 data is 0
10.0.0.2:10.0.0.1_ftp_InOctets_CONV_X1 data is 1.741e+006

10.0.0.1:10.0.0.2_udp_InOctets_CONV_X1 data is 0
10.0.0.2:10.0.0.1_udp_InOctets_CONV_X1 data is 1.741e+006
我们使用以下查询来实现结果

select distinct concat(inet_ntoa(np.serverid), ':',inet_ntoa(np.clientid),'_inoctets_',rp.name,'_',c.table_name)HostCounter1, concat(inet_ntoa(np.clientid),':',inet_ntoa(np.serverid),'_inoctets_',rp.name,'_',c.table_name)HostCounter2, np.inoctets value1 ,np.outoctets value2, from_unixtime(timestamp) from information_schema.`COLUMNS` c,D1.CONV_X1 np,D2.PROT_NAME rp where c.table_schema='D1' AND c.table_name ='CONV_X1' AND np.protocolid=rp.id AND np.timestamp between unix_timestamp('2011-08-31 10:33:14') AND unix_timestamp('2011-08-31 11:33:14') order by timestamp;
这将以以下格式提供输出:

HostCounter1 HostCounter2 value1 value2 from_unixtime(timestamp)
10.0.0.1:10.0.0.2_ftp_InOctets_CONV_X1 10.0.0.2:10.0.0.1_ftp_InOctets_CONV_X1 0 1.741e+006 1310121900(in unix format)
10.0.0.1:10.0.0.2_udp_InOctets_CONV_X1 10.0.0.2:10.0.0.1_udp_InOctets_CONV_X1 0 1.741e+006

我们的C++代码使用SQL调用SQLDRIVerConnect()、SQLExcel()来执行这些调用,这些调用花费大量时间连接到数据库并执行此查询。正因为如此,我们面临着性能问题与我们的C++代码。 请告诉我们是否有任何方法可以解决性能问题。 ODBC驱动程序中的更改能帮助我们吗?


我们可以优化查询吗?如果是这样的话,

尝试查看查询计划并确保你有适当的索引。< /P>什么“大量的时间”意味着?大量的时间意味着运行这个查询大约需要2秒钟,从C++连接到MySQL,大约1分钟执行这个查询。