资源描述:
《提高mysql查询效率的三个技巧--》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、提高MySQL查询效率的三个技巧>> MySQL由于它本身的小巧和操作的高效,在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点变化频繁,因此一定要保持查询和插入的高效.以下是我在使用过程中做的提高效率的三个有效的尝试. 使用statement进行绑定查询 使用statement可以提前构建查询语法树,在查询时不再需要构建语法树就直接查询.因此可以很好的提高查询的效率.这个方法适合于查询条件固定但查询非常
2、频繁的场合. 使用方法是: 绑定,创建一个MYSQL_STMT变量,与对应的查询字符串绑定,字符串中的问号代表要传入的变量,每个问号都必须指定一个变量. 查询,输入每个指定的变量,传入MYSQL_STMT变量用可用的连接句柄执行. 代码如下: //1.绑定 boolCDBManager::BindInsertStmt(MYSQL*connecthandle) { //作插入操作的绑定 MYSQL_BINDinsertbind[FEILD_NUM]; if(m_stInsertPar
3、am==NULL) m_stInsertParam=ne_stInsertStmt=mysql_stmt_init(connecthandle); //构建绑定字符串 charinsertSQL[SQL_LENGTH]; strcpy(insertSQL,insertintoHostCache(SessionID,ChannelID,ISPType, ExternalIP,ExternalPort,InternalIP,InternalPort) values(?,?,?,?,?,?,?)
4、); mysql_stmt_prepare(m_stInsertStmt,insertSQL,strlen(insertSQL)); intparam_count=mysql_stmt_param_count(m_stInsertStmt); if(param_count!=FEILD_NUM) returnfalse; //填充bind结构数组,m_sInsertParam是这个statement关联的结构变量 memset(insertbind,0,sizeof(insertbind)
5、); insertbind[0].buffer_type=MYSQL_TYPE_STRING; insertbind[0].buffer_length=ID_LENGTH/*-1*/; insertbind[0].buffer=(char*)m_stInsertParam->sessionid; insertbind[0].is_null=0; insertbind[0].length=0; insertbind[1].buffer_type=MYSQL_TYPE_STRING;
6、insertbind[1].buffer_length=ID_LENGTH/*-1*/; insertbind[1].buffer=(char*)m_stInsertParam->channelid; insertbind[1].is_null=0; insertbind[1].length=0; insertbind[2].buffer_type=MYSQL_TYPE_TINY; insertbind[2].buffer=(char*)m_stInsertParam->ISPt
7、ype; insertbind[2].is_null=0; insertbind[2].length=0; insertbind[3].buffer_type=MYSQL_TYPE_LONG; insertbind[3].buffer=(char*)m_stInsertParam->externalIP; insertbind[3].is_null=0; insertbind[3].length=0; insertbind[4].buffer_type=MYSQL_TYPE_SHO
8、RT; insertbind[4].buffer=(char*)m_stInsertParam->externalPort; insertbind[4].is_null=0; insertbind[4].length=0; insertbind[5].buffer_type=MYSQL_TYPE_LONG; insertbind[5].buffer=(char*)m_stInsertParam->internalIP; inser