"select * from tables"
查询获取结果非常慢:
这是我在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);
}
答案 0 :(得分:0)
除了事实,你的帖子中甚至没有提出问题,你将苹果与橙子进行比较。 Mysql给你(我认为 - 纠正我,如果我错了)执行查询所需的时间,而在你的C代码中你测量在程序的开始和结束之间经过的时间。这至少有两个原因是错误的:
两次GetTickCount()次呼叫之间的差异为您提供了整个系统中的呼叫之间的时间,而不是执行软件所花费的时间。这是两个不同的事情,因为你的过程不必从开始到结束不间断地执行 - 它可以(并且可能将)在执行过程中交换另一个进程,它可以被中断等。整个时间系统在程序之外做的事情将被添加到您的测量中。为了花时间执行代码,您可以使用GetProcessTimes或QueryProcessCycleTime。
即使你确实使用了一种合适的方法来检索你的时间,你也会计算错误的代码部分。您不必测量执行查询和检索结果所花费的时间,而是测量整个执行时间:建立连接,复制查询,执行查询,存储结果,获取结果,打印结束和关闭连接。这与mysql测量的完全不同。打印数百行可能需要相当多的时间,具体取决于您的shell - 而不是实际的SQL查询执行。如果您想知道连接器需要多长时间来检索数据,您应该对仅负责执行查询和数据检索的代码进行基准测试。或者,更好的是,使用一些专用的性能监视工具或库。我不能指出具体的解决方案,因为我从未进行过这样的测试,但肯定有一些。