c++ - C++中的MySQL运行缓慢

标签 c++ mysql odbc

我们有 MySQL 数据库。我们正在尝试使用 C++ 代码中的 ODBC 驱动程序连接到此 MySQL 数据库。我们使用的ODBC驱动是3.51版本。

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

ProtocolID ServerID ClientID TimeStamp 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,其中包含此协议(protocol) ID 的信息。我们将数据库 D1 中的 CONV_X1 表中的 ProtocolID 映射到数据库 D2 中的 PROT_NAME 表以获取协议(protocol)名称。

从 information_schema 中获取表名 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()、SQLExecDirect() 来执行此操作,这些调用需要花费大量时间来连接到数据库并执行此查询。因此,我们的 C++ 代码面临性能问题。 请让我们知道是否有任何方法可以解决性能问题。 ODBC 驱动程序的更改对我们有帮助吗? 我们可以优化查询吗?如果是怎么办?

最佳答案

尝试查看查询计划并确保您拥有适当的索引。

关于c++ - C++中的MySQL运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7333486/

相关文章:

c++ - 数据类型未知时如何声明数组

c++ - 在 XCode 中与 dlib、链接器错误和 save_jpeg 作斗争

c++ - CoRegisterClassObject 破坏线程安全

c++ - Xerces-c断言错误

php - 上传图片然后使用 php 将位置保存在 MySQL 数据库中。

php - 奇怪的学说结果数组结构如果我在 DQL 查询中传递三次与相同的相关实体连接

php - 将 MySQL 表数据回显为 HTML

java - 将 Access 数据库中的所有表列出到 JScrollPane 中

php - PDO不能向Access数据库插入新记录,但可以在同一个连接中读取和删除

sql-server - SQL Server 数据是如何返回的