2017-08-24 36 views
0

"select * from tables"查询非常缓慢,得到的结果:MySQL的连接器(的libmysql/C)是变得非常缓慢在MySQL连接器/的libmysqlçRES

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); 
} 

回答

0

除了这个事实,即使你的帖子中没有提到的问题,你也在比较苹果和橙子。 Mysql为您提供了(如果我错了,请纠正我)执行查询所需的时间,而在您的C代码中,您可以测量程序开始和结束之间传递的时间。这至少有两个原因是错误的:二GetTickCount()通话之间

  1. 差异给你已调用之间在整个系统经过的时间,不花时间执行你的软件。这是两件不同的事情,因为你的过程不必从头到尾执行 - 它可以(也可能会)在执行过程中交换另一个进程,它可以被中断等。整个过程系统花费在您的程序之外的东西将被添加到您的测量中。为了节省执行代码的时间,您可以使用GetProcessTimesQueryProcessCycleTime

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

+0

那它!它在打印线上花费太多......查询和删除时间大约是60ms这是正确的.....也许我问了一个愚蠢的问题..... tttttthanks很多.. –