• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 15,comments - 21,trackbacks - 0
                  最近閑來(lái)無(wú)事,想看看mysql預(yù)處理執(zhí)行效率和直接執(zhí)行的效率差別有多大。先去網(wǎng)上查了查,兩種聲音都有,沒(méi)辦法,只好自己來(lái)驗(yàn)證驗(yàn)證。
                 我打算測(cè)試插入的效率,下來(lái)建一個(gè)表
                  
            CREATE TABLE `test` (
              `id` int(11NOT NULL AUTO_INCREMENT,
              `col1` 
            varchar(64NOT NULL DEFAULT '',
              `col2` 
            char(60DEFAULT NULL,
              `col3` blob,
              `col4` 
            timestamp NULL DEFAULT NULL,
              
            PRIMARY KEY (`id`)
            ) ENGINE
            =MyISAM DEFAULT CHARSET=utf8;
            接下來(lái)貼上兩段分別用預(yù)處理插入的語(yǔ)句和直接插入的語(yǔ)句
            預(yù)處理代碼
            bool insert()
            {
                if (mysql_stmt_prepare(stmt, "INSERT test(col1,col2,col3,col4) values(?,?,?,?)", strlen("INSERT test(col1,col2,col3,col4) values(?,?,?,?)")))
                {
                    fprintf(stderr, 
            " mysql_stmt_prepare(), insert failed\r\n");
                    fprintf(stderr, 
            " %s\r\n", mysql_stmt_error(stmt));
                    
            return false;
                }
                
                
            //測(cè)試mysql_stmt_field_count()作用
                
            //printf("mysql_stmt_field_count return value[%d]\r\n",mysql_stmt_field_count(stmt));
                MYSQL_BIND    bind[4];
                unsigned 
            long length[4];
                my_bool       is_null[
            4];
                
                memset(bind,
            0,sizeof(bind));
                memset(length,
            0,sizeof(length));
                memset(is_null,
            0,sizeof(is_null));
                
                
            char varchar_var[STRING_SIZE] = "hello yg";
                
            char char_var[STRING_SIZE] = "hello dl";
                
                
            struct st_stud st;
                st.id 
            = 1;
                strncpy(st.name,
            "shine.yang",16);
                st.score 
            = 10.0f;
                
                time_t cur_t 
            = time(NULL);
                
            struct tm cur_tm;
                localtime_r(
            &cur_t,&cur_tm);
                MYSQL_TIME    ts;
                ts.year 
            = cur_tm.tm_year+1900, ts.month = cur_tm.tm_mon+1, ts.day = cur_tm.tm_mday,ts.hour = cur_tm.tm_hour, ts.minute = cur_tm.tm_min, ts.second = cur_tm.tm_sec;
                
                bind[
            0].buffer_type= MYSQL_TYPE_STRING;
                bind[
            0].buffer= varchar_var;
                bind[
            0].buffer_length = STRING_SIZE;
                length[
            0= strlen(varchar_var);
                bind[
            0].length = &length[0];
                bind[
            0].is_null= &is_null[0];
                
                bind[
            1].buffer_type= MYSQL_TYPE_STRING;
                bind[
            1].buffer= char_var;
                bind[
            1].buffer_length = STRING_SIZE;
                length[
            1= strlen(char_var);
                bind[
            1].length = &length[1];
                bind[
            1].is_null= &is_null[1];
                
                bind[
            2].buffer_type= MYSQL_TYPE_BLOB;
                bind[
            2].buffer= (char *)&st;
                bind[
            2].buffer_length = sizeof(st);
                length[
            2= sizeof(st);
                bind[
            2].length = &length[2];
                bind[
            2].is_null= &is_null[2];
                
                bind[
            3].buffer_type = MYSQL_TYPE_TIMESTAMP;
                bind[
            3].buffer= (char *)&ts;
                bind[
            3].buffer_length = sizeof(ts);
                length[
            3= sizeof(ts);
                bind[
            3].length = &length[3];
                bind[
            3].is_null= &is_null[3];
                
                dword time1 
            = get_time();
                
            for ( int i = 0; i < INSERT_ITEM_CNT;++i )
                {
                    
            if ( mysql_stmt_bind_param(stmt,bind) )
                    {
                        fprintf(stderr,
            "mysql_stmt_bind_param failed,err = %s\r\n",mysql_stmt_error(stmt));
                        
            return false;
                    }
                    
                    
            if ( mysql_stmt_execute(stmt) )
                    {
                        fprintf(stderr,
            "mysql_stmt_excute failed,err = %s\r\n",mysql_stmt_error(stmt));
                        
            return false;
                    }
                    
                    
            //printf("Total effect rows [%d]\r\n",(int)mysql_stmt_affected_rows(stmt));
                }
                dword time2 
            = get_time();
                fprintf(stdout,
            "stmt insert %d items,during time[%d]\r\n",INSERT_ITEM_CNT,time2-time1);
                
            return true;
            }
            直接插入的代碼
            bool insert()
            {
                char varchar_var[STRING_SIZE] = "hello yg";
                
            char char_var[STRING_SIZE] = "hello dl";
                
            struct st_stud st;
                st.id 
            = 1;
                strncpy(st.name,
            "shine.yang",16);
                st.score 
            = 10.0f;
                
                
            char blob_var[128];
                mysql_real_escape_string(sql, blob_var, (
            char *)&st,sizeof(st));
                
                
            char query[1024= {0};
                
            int len = snprintf(query,1024,"insert test(col1,col2,col3,col4) values('%s','%s','%s',NOW())",varchar_var,char_var,blob_var);
                dword time1 
            = get_time();
                
            for (int i = 0;i < INSERT_ITEM_CNT;++i )
                {
                    mysql_real_query(sql,query,len);
                }
                dword time2 
            = get_time();
                fprintf(stdout,
            "direct insert %d items,during time[%d]\r\n",INSERT_ITEM_CNT,time2-time1);
                
                
            return true;
            }
            下面是測(cè)試結(jié)果
                                    預(yù)處理耗時(shí)(單位微秒)         直接操作耗時(shí)(單位微秒)
            插入10000條         660763                              746571
            插入100000條       8597130                            8784918
            插入1000000條     95070524                          100157193
            可以看出,插入方面,預(yù)處理效率要高些
            posted on 2012-01-29 16:28 梨樹陽(yáng)光 閱讀(716) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            精品蜜臀久久久久99网站| 久久精品国产亚洲Aⅴ香蕉 | 国产精品久久永久免费| 精品久久久久久无码中文字幕一区| 国产精品一区二区久久国产| 国产AV影片久久久久久| 亚洲国产日韩欧美综合久久| 69久久精品无码一区二区| 久久影院午夜理论片无码 | 99久久亚洲综合精品网站| 亚洲精品国精品久久99热| 国产91久久精品一区二区| 久久精品极品盛宴观看| 嫩草影院久久国产精品| 无码人妻久久一区二区三区 | 国产精品免费久久| 色综合久久无码五十路人妻| 狠狠久久综合| 青青青青久久精品国产| 亚洲精品乱码久久久久久自慰| 久久国产精品国语对白| 色综合久久天天综合| 亚洲日韩中文无码久久| 久久影视综合亚洲| 韩国三级中文字幕hd久久精品 | 久久精品一区二区影院| 久久久久久久综合日本亚洲| 久久免费视频1| 超级碰碰碰碰97久久久久| 思思久久好好热精品国产| 伊人久久大香线蕉综合5g| 欧美精品福利视频一区二区三区久久久精品| 久久99精品久久久久婷婷| 波多野结衣AV无码久久一区| 久久精品综合网| 久久夜色精品国产噜噜亚洲a| 婷婷久久综合九色综合九七| 亚洲а∨天堂久久精品| 国产69精品久久久久APP下载| 色婷婷久久久SWAG精品| 久久精品国产亚洲av麻豆蜜芽|