Hi all,

I was hoping this was the right place for a question about the C API.
I've been grabbing result sets from tables in the C API for a few years
now, but I'm starting to work with result sets that are big enough to
bog me down.  Of course, the result sets aren't insanely big, so I was
wondering why it was taking so long for me to suck them in to C,
especially when I can run the same query from the command line using the
binaries and they can cache it to a file on the hard disk pretty much
instantly.  So, basically, I was just hoping that I've been doing
something wrong, or at least that there was something I could do better,
to make my database communication as fast as the mysql command line
tools.  I've checked out their source and nothing obvious jumps out at
me.  Here's a non-functional sample of my code:

int main(int argc, char *argv[] ) {
        int uid;
        int sid;
        char sqlBuff[4000];
        int err = 0;
        int i;
        // Setup the database communications space:
        MYSQL dbase;
        MYSQL_RES *result;
        MYSQL_ROW row;

        float **genAttrib;
        
        //... snip ...
        
        
        // Connect to the database:
        if (mysql_init(&dbase) == NULL) err = 1;
        else {

        
if(mysql_real_connect(&dbase,"localhost","login","pass","test",0,NULL,CL
IENT_FOUND_ROWS) == NULL) {
                        err = 1;
                        fprintf(stderr, "Failed to connect to database:
Error: %s\n",
                                mysql_error(&dbase));
                }
        }
        
        // If the connection couldn't be established:
        if(err) {
                printf("db connection failed!\n");
                exit(1);
        }


        //... snip ...

        // This query could have as many as a million rows returned, but
the query itself runs quite fast.  It seems to just be
        // sucking it into C that can take up to four seconds on our
dual Xeon server.
        sprintf(sqlBuff,"SELECT A.* FROM `attribs` as A, login AS L
WHERE A.guid=L.guid AND L.isActive=1 AND L.sid=%d AND
A.guid!=%d",sid,uid);
        if (mysql_real_query(&dbase,sqlBuff,strlen(sqlBuff))) {
                printf("Pool Attributes Select Failed... dumbass\n");
                fprintf(stderr, "Error: %s\n",
                                mysql_error(&dbase));
                exit(1);
        }

        result = mysql_store_result(&dbase);
        numRows=mysql_num_rows(result);
        for (i=0;i<numRows;i++) {
                row = mysql_fetch_row(result);
                tempq=atoi(row[1]);
                tempP=atoi(row[0]);
                genAttrib[tempP][tempq]=atoi(row[2]);
        }

return 0;
}

So, if someone sees something that I could change to speed things up, or
I should direct this question elsewhere... thanks for your help and
thanks for reading this far!

Thanks again,
Matt

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to