国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql數(shù)據(jù)庫查詢優(yōu)化 mysql效率第1/3頁

2020-01-19 00:25:12
字體:
供稿:網(wǎng)友
提高M(jìn)ySQL 查詢效率的三個(gè)技巧小結(jié)
MySQL由于它本身的小巧和操作的高效, 在數(shù)據(jù)庫應(yīng)用中越來越多的被采用.我在開發(fā)一個(gè)P2P應(yīng)用的時(shí)候曾經(jīng)使用MySQL來保存P2P節(jié)點(diǎn),由于P2P的應(yīng)用中,結(jié)點(diǎn)數(shù)動(dòng)輒上萬個(gè),而且節(jié)點(diǎn)變化頻繁,因此一定要保持查詢和插入的高效.以下是我在使用過程中做的提高效率的三個(gè)有效的嘗試.

l        使用statement進(jìn)行綁定查詢
使用statement可以提前構(gòu)建查詢語法樹,在查詢時(shí)不再需要構(gòu)建語法樹就直接查詢.因此可以很好的提高查詢的效率. 這個(gè)方法適合于查詢條件固定但查詢非常頻繁的場(chǎng)合.
使用方法是:
綁定, 創(chuàng)建一個(gè)MYSQL_STMT變量,與對(duì)應(yīng)的查詢字符串綁定,字符串中的問號(hào)代表要傳入的變量,每個(gè)問號(hào)都必須指定一個(gè)變量. 
查詢, 輸入每個(gè)指定的變量, 傳入MYSQL_STMT變量用可用的連接句柄執(zhí)行. 
代碼如下:   
復(fù)制代碼 代碼如下:

//1.綁定 
bool CDBManager::BindInsertStmt(MYSQL * connecthandle) 

       //作插入操作的綁定 
       MYSQL_BIND insertbind[FEILD_NUM]; 
       if(m_stInsertParam == NULL) 
              m_stInsertParam = new CHostCacheTable; 
       m_stInsertStmt = mysql_stmt_init(connecthandle); 
       //構(gòu)建綁定字符串 
       char insertSQL[SQL_LENGTH]; 
       strcpy(insertSQL, "insert into HostCache(SessionID, ChannelID, ISPType, " 
              "ExternalIP, ExternalPort, InternalIP, InternalPort) " 
              "values(?, ?, ?, ?, ?, ?, ?)"); 
       mysql_stmt_prepare(m_stInsertStmt, insertSQL, strlen(insertSQL)); 
       int param_count= mysql_stmt_param_count(m_stInsertStmt); 
       if(param_count != FEILD_NUM) 
              return false; 
       //填充bind結(jié)構(gòu)數(shù)組, m_sInsertParam是這個(gè)statement關(guān)聯(lián)的結(jié)構(gòu)變量 
       memset(insertbind, 0, sizeof(insertbind)); 
       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; 
       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->ISPtype; 
       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_SHORT; 
       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; 
       insertbind[5].is_null = 0; 
       insertbind[5].length = 0; 

       insertbind[6].buffer_type = MYSQL_TYPE_SHORT; 
       insertbind[6].buffer = (char *)&m_stInsertParam->internalPort; 
       insertbind[6].is_null = 0; 
       insertbind[6].is_null = 0; 
       //綁定 
       if (mysql_stmt_bind_param(m_stInsertStmt, insertbind)) 
              return false; 
       return true; 


//2.查詢 
bool CDBManager::InsertHostCache2(MYSQL * connecthandle, char * sessionid, char * channelid, int ISPtype, / 
              unsigned int eIP, unsigned short eport, unsigned int iIP, unsigned short iport) 

       //填充結(jié)構(gòu)變量m_sInsertParam 
       strcpy(m_stInsertParam->sessionid, sessionid); 
       strcpy(m_stInsertParam->channelid, channelid); 
       m_stInsertParam->ISPtype = ISPtype; 
       m_stInsertParam->externalIP = eIP; 
       m_stInsertParam->externalPort = eport; 
       m_stInsertParam->internalIP = iIP; 
       m_stInsertParam->internalPort = iport; 
       //執(zhí)行statement,性能瓶頸處 
       if(mysql_stmt_execute(m_stInsertStmt)) 
              return false; 
       return true; 

  
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜宾市| 扶绥县| 凌云县| 香河县| 裕民县| 东乡族自治县| 红原县| 铁岭市| 潜山县| 泽普县| 新竹市| 泽库县| 施秉县| 邢台县| 中超| 东兴市| 鄯善县| 皋兰县| 营山县| 绩溪县| 宽甸| 通化县| 钟祥市| 莒南县| 平潭县| 郧西县| 武冈市| 洞口县| 平谷区| 库伦旗| 平定县| 龙岩市| 莱阳市| 额济纳旗| 南涧| 汕头市| 永定县| 永定县| 赣州市| 商丘市| 揭西县|