gpt4 book ai didi

c - MySQL 连接器(libmysql/C)获取 RES 非常慢

转载 作者:行者123 更新时间:2023-11-30 16:42:21 26 4
gpt4 key购买 nike

MySQL Connector/libmysql C 中的

"select * from table" 查询获取结果非常慢:

Query process cost

这是我的 C 代码:

int getfrommysql() {
time_t starttime, endtime;
time(&starttime);
double st;
st = GetTickCount();
MYSQL *sqlconn = NULL;
MYSQL_RES * res = NULL;
MYSQL_ROW row = NULL;
MYSQL_FIELD * field;
/*char ipaddr[16];
memset(ipaddr,0,sizeof(ipaddr));*/
char * sqlquery = "select * from seat_getvalue";
sqlconn = malloc(sizeof(MYSQL));
sqlconn = mysql_init(sqlconn);
mysql_real_connect(sqlconn, "111.111.111.111", "root", "password", "database", 0, NULL, 0);
char query[100];
memset(query, 0, 100);
strcpy(query, "select * from seat_getvalue");
mysql_query(sqlconn, query);
res = mysql_store_result(sqlconn);
int col_num, row_num;
if (res) {
col_num = res->field_count;
row_num = res->row_count;
printf("\nthere is a %d row,%d field table", res->row_count, res->field_count);
}
for (int i = 0; i < row_num; i++) {
row = mysql_fetch_row(res);
for (int j = 0; j < col_num; j++) {
printf("%s\t", row[j]);
}
printf("\n");
}
mysql_close(sqlconn);
time(&endtime);
double et = GetTickCount();
printf("the process cost time(get by GetTickCount):%f",et-st);
printf("\nthere is a %d row,%d field table", res->row_count, res->field_count);
}

最佳答案

除此之外,您的帖子中甚至没有提出问题,您正在将苹果与橙子进行比较。 Mysql 为您提供(我认为 - 如果我错了请纠正我)执行查询所需的时间,而在您的 C 代码中,您测量程序开始和结束之间耗时。这是错误的,至少有两个原因:

  1. 两者之间的差异GetTickCount()调用为您提供整个系统调用之间耗时,而不是执行软件所花费的时间。这是两件不同的事情,因为您的进程不必从头到尾不间断地执行 - 它可以(并且可能会)在执行过程中交换为另一个进程,它可以被中断等等。系统花费在程序之外的事情将被添加到您的测量中。要获取执行代码所花费的时间,您可以使用 GetProcessTimesQueryProcessCycleTime .

  2. 即使您确实使用了适当的方法来检索时间,您也会对代码的错误部分进行计时。您不是测量执行查询和检索结果所花费的时间,而是测量整个执行时间:建立连接、复制查询、执行查询、存储结果、获取结果、打印结果和关闭连接。这与 mysql 测量的完全不同。打印数百行可能需要相当多的时间,具体取决于您的 shell - 比实际的 SQL 查询执行时间还要长。如果您想知道连接器需要多长时间来检索数据,您应该负责执行查询和数据检索的代码进行基准测试。或者,更好的是,使用一些专用的性能监控工具或库。我无法指出具体的解决方案,因为我从未进行过这样的测试,但肯定有一些。

关于c - MySQL 连接器(libmysql/C)获取 RES 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45858306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com