2017-08-24 71 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很多.. –