mysql版本为fedora8安装时自带的5.0.45-4.fc8,自己下载了对应的开发包,连接数据库后执行SQL语句速度特别慢,下面是我试验时查询的表,总共3个字段,记录数10条以下mysql> describe DZJC_T_CSDM_B;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| DMLB | decimal(2,0) | NO | PRI | | |
| DMZ | varchar(10) | NO | PRI | | |
| DMMS | varchar(50) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+下面是数据库查询和计时的部分代码,sql查询的时间一般在200-300毫秒,请高手帮忙看看可能是什么原因导致的速度慢。 myconnect = mysql_init(myconnect);
if (mysql_real_connect (myconnect, "localhost", (char*)(DB_USER), (char*)(DB_PWD),(char*)(DB_NAME), MYSQL_PORT,NULL,0)== NULL)
{
perror("未能连接上数据库");
}
struct timeval start, end;
long timeuse;
gchar query_buf[255];
sprintf(query_buf, "select * from DZJC_T_CSDM_B where DMLB = '1'"); gettimeofday(&start, NULL);
if(mysql_query(myconnect, query_buf)==0)
{
gettimeofday(&end, NULL);
timeuse = 1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec;
printf("sql query time = %ld\n", timeuse);
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| DMLB | decimal(2,0) | NO | PRI | | |
| DMZ | varchar(10) | NO | PRI | | |
| DMMS | varchar(50) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+下面是数据库查询和计时的部分代码,sql查询的时间一般在200-300毫秒,请高手帮忙看看可能是什么原因导致的速度慢。 myconnect = mysql_init(myconnect);
if (mysql_real_connect (myconnect, "localhost", (char*)(DB_USER), (char*)(DB_PWD),(char*)(DB_NAME), MYSQL_PORT,NULL,0)== NULL)
{
perror("未能连接上数据库");
}
struct timeval start, end;
long timeuse;
gchar query_buf[255];
sprintf(query_buf, "select * from DZJC_T_CSDM_B where DMLB = '1'"); gettimeofday(&start, NULL);
if(mysql_query(myconnect, query_buf)==0)
{
gettimeofday(&end, NULL);
timeuse = 1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec;
printf("sql query time = %ld\n", timeuse);
sprintf(query_buf, "select * from DZJC_T_CSDM_B where DMLB = 1"); 你的DMLB 本来就是数字型,不要用字符型的'1'去比较,反而无法用上你的索引。
sprintf(query_buf, "select * from DZJC_T_CSDM_B where DMLB = 1"); 你的DMLB 本来就是数字型,不要用字符型的'1'去比较,反而无法用上你的索引。
然后执行 mysql -u DB_USER -p DB_NAME
然后执行 select * from DZJC_T_CSDM_B where DMLB = 1 的执行速度在命令行下并不是没出精确的时间,只不过是想确定问题是在mysql上还是在你的C程序中。很显然,如果在mysql命令行下速度很快,则你需要把精力放在你的C程序中找原因。如果在mysql中就很慢,则再继续看是mysql什么原因,去调整优化一些参数。