当前位置:首页 > 日记 > 正文

关于提高MySQL查询效率的三个页面1/2

关于提高MySQL查询效率的三个页面1/2
MySQL由于其体积小和运行效率高,在数据库应用中得到越来越广泛的应用。当我在一个P2P应用程序开发中使用了MySQL来保存P2P节点时,由于p2p的应用,成千上万的节点和节点频繁变化,所以一定要保持高效的查询并插入以下三个有效的。我试着在做的过程中提高效率。

l使用语句进行绑定查询
使用语句可以提前建立查询语法树,不需查询就能直接查询。它能很好地提高查询效率。该方法适用于查询条件固定但查询频繁的场合。
使用方法是:
结合,创造一个mysql_stmt变量绑定到相应的查询字符串,字符串中的问号代表要输入的变量,每个问号必须指定一个变量。
查询,输入每一个指定的变量,和传入的mysql_stmt变量执行可用的连接处理。
代码如下:

1。结合
布尔cdbmanager::BindInsertStmt(mysql * connecthandle)
{
使插入操作绑定
mysql_bind insertbind { feild_num };
如果(m_stinsertparam = null)
m_stinsertparam =新chostcachetable;
m_stinsertstmt = mysql_stmt_init(connecthandle);
构建/绑定字符串
insertsql sql_length } { char;
Strcpy(insertsql,插入hostcache(SessionID,channelid,ISPType,)
externalip,ExternalPort,internalip,internalport)。
值(,);
mysql_stmt_prepare(m_stinsertstmt,insertsql,strlen(insertsql));
国际param_count = mysql_stmt_param_count(m_stinsertstmt);
如果(param_count!= feild_num)
返回false;
结合/ m_sinsertparam充满结构数组,声明结构变量的关系
memset(insertbind,0,sizeof(insertbind));
insertbind { 0 }。buffer_type = mysql_type_string;
insertbind { 0 }。buffer_length = id_length 1 / * * /;
insertbind { 0 }。缓冲=(char *)m_stinsertparam -> SessionID;
insertbind { 0 }。is_null = 0;
insertbind { 0 }。长度= 0;

insertbind { 1 }。buffer_type = mysql_type_string;
insertbind { 1 }。buffer_length = id_length 1 / * * /;
insertbind { 1 }。缓冲=(char *)m_stinsertparam -> channelid;
insertbind { 1 }。is_null = 0;
insertbind { 1 }。长度= 0;

insertbind { 2 }。buffer_type = mysql_type_tiny;
insertbind { 2 }。缓冲=(char *)m_stinsertparam -> isptype;
insertbind { 2 }。is_null = 0;
insertbind { 2 }。长度= 0;

insertbind { 3 }。buffer_type = mysql_type_long;
insertbind { 3 }。缓冲=(char *)m_stinsertparam -> externalip;
insertbind { 3 }。is_null = 0;
insertbind { 3 }。长度= 0;

insertbind { 4 }。buffer_type = mysql_type_short;
insertbind { 4 }。缓冲=(char *)m_stinsertparam -> externalport;
insertbind { 4 }。is_null = 0;
insertbind { 4 }。长度= 0;

insertbind { 5 }。buffer_type = mysql_type_long;
insertbind { 5 }。缓冲=(char *)m_stinsertparam -> internalip;
insertbind { 5 }。is_null = 0;
insertbind { 5 }。长度= 0;

insertbind { 6 }。buffer_type = mysql_type_short;
insertbind { 6 }。缓冲=(char *)m_stinsertparam -> internalport;
insertbind { 6 }。is_null = 0;
insertbind { 6 }。is_null = 0;
绑定
如果(mysql_stmt_bind_param(m_stinsertstmt,insertbind))
返回false;
返回true;
}

2。查询
布尔cdbmanager::inserthostcache2(mysql * connecthandle,char * channelid SessionID,char *,int ISPtype,
unsigned int型、无符号短整型,短整型,IIP,iPORT)
{
/ /填充结构变量m_sinsertparam
Strcpy(m_stinsertparam -> SessionID,SessionID);
Strcpy(m_stinsertparam -> channelid,channelid);
m_stinsertparam -> isptype = isptype;
m_stinsertparam -> externalip = EIP;
m_stinsertparam -> externalport =报;
m_stinsertparam -> internalip = IIP;
m_stinsertparam -> internalport = iPORT;
执行语句,性能瓶颈
如果(mysql_stmt_execute(m_stinsertstmt))
返回false;
返回true;
}

随机存取记录
在一些数据库应用程序中,我们不需要获得满足需求的所有记录,但是我们需要随机地记录满足需求的记录。这种情况在数据服务的统计分析和从大容量数据库中获取少量数据时很常见。
有两种方法可以做。
1、传统方法首先查询满足要求的所有记录,然后随机选取一些记录。当多个记录满足时,该方法不能达到理想的结果。
2、使用限制语法,我们首先得到满足需求的记录数量,然后在SQL查询中添加限制,以限制查询以满足所需记录。虽然这种方法需要两次查询,但当数据量较大时,它更有效。
示例代码如下所示:

传统的方法1。
/ /性能瓶颈,10万条记录,查询140ms的,得到的结果集时,其余的可以忽略
Int CDBManager::queryhostcache(mysql * connecthandle,char * channelid,int ISPtype,cdbmanager::chostcachetable * hostcache)
{
焦sql_length递给李四{ };
memset(递给李四,0,sizeof(递给李四));
sprintf(递给李四,选择*从hostcache哪里channelid =% s isptype = %d
如果(mysql_real_query(connecthandle,递给李四,strlen(递给李四))!= 0)检索
返回0;
获取/设置
m_presultset = mysql_store_result(connecthandle);
如果(m_presultset!)获取结果集。
返回0;
int = iallnumrows(int)(mysql_num_rows(m_presultset) / / / <);所有的搜索结果数
计算返回的结果数。
int = ireturnnumrows(iallnumrows <= return_query_host_num iallnumrows:return_query_host_num);
如果(ireturnnumrows return_query_host_num)
{
得到/逐项列出
为(int i = 0;i < ireturnnumrows;i++)
{
一个接一个地获取
m_row = mysql_fetch_row(m_presultset);
如果(m_row { 0 }!= null)
Strcpy(hostcache {我}。SessionID,m_row { 0 });
如果(m_row { 1 }!= null)
Strcpy(hostcache {我}。channelid,m_row { 1 });
如果(m_row { 2 }!= null)
hostcache {我}。isptype = atoi(m_row { 2 });
如果(m_row { 3 }!= null)
hostcache {我}。externalip = atoi(m_row { 3 });
If (m_Row{4}! = null)
hostcache {我}。externalport = atoi(m_row { 4 });
如果(m_row { 5 }!= null)
hostcache {我}。internalip = atoi(m_row { 5 });
如果(m_row { 6 }!= null)
hostcache {我}。internalport = atoi(m_row { 6 });
}
}
其他的
{
随机选择指定的返回记录
国际iremainder = iallnumrows % ireturnnumrows; / / / <剩余
国际iquotient = iallnumrows / / / ireturnnumrows; / <
国际istartindex =兰特(%)(iremainder + 1); / / / <开始。
得到/逐项列出
为(int iselectedindex = 0;iselectedindex < ireturnnumrows;iselectedindex + +)
{
mysql_data_seek(m_presultset,istartindex + iquotient * iselectedindex);
m_row = mysql_fetch_row(m_presultset);
如果(m_row { 0 }!= null)
Strcpy(hostcache { iselectedindex }。SessionID,m_row { 0 });
如果(m_row { 1 }!= null)
Strcpy(hostcache { iselectedindex }。channelid,m_row { 1 });
如果(m_row { 2 }!= null)
iselectedindex hostcache { }。isptype = atoi(m_row { 2 });
如果(m_row { 3 }!= null)
iselectedindex hostcache { }。externalip = atoi(m_row { 3 });
如果(m_row { 4 }!= null)
iselectedindex hostcache { }。externalport = atoi(m_row { 4 });
如果(m_row { 5 }!= null)
iselectedindex hostcache { }。internalip = atoi(m_row { 5 });
如果(m_row { 6 }!= null)
iselectedindex hostcache { }。internalport = atoi(m_row { 6 });
}
}
结果集/内容的释放
mysql_free_result(m_presultset);
返回ireturnnumrows;
}

相关文章

应用软件是禁止使用个人隐私(溶液)在

应用软件是禁止使用个人隐私(溶液)在

应用软件,溶液,个人隐私,禁止使用,电脑软件,Win8.1允许部分信任的应用程序使用用户的个人信息,如用户名、头像、位置信息和访问链接。如果您希望隐私更安全,可以禁用此功能。 操作方法:在开始屏幕,鼠标移动到右右键弹出工具栏,请单击更改设置->…

Linux的更新和查询命令chkconfig详

Linux的更新和查询命令chkconfig详

查询,命令,新和,详细介绍,电脑软件,评论:Linux提供了chkconfig命令来更新和查询系统服务在不同运行级别。 语法是: {姓名} chkconfig --列表用于列表服务 chkconfig --添加名称是用来增加服务 chkconfig --德尔名称用于删除服务 chkconfig { …

腾讯信鸽:大数据时代的精确移动推送

腾讯信鸽:大数据时代的精确移动推送

推送,大数据时代,腾讯,信鸽,精确,近日,腾讯已正式推出了移动信息推送平台信鸽,免费为开发商所有Android和iOS平台。据悉,该产品属于腾讯云推出的新功能,其目的是帮助开发者增强用户粘性,并激活的人使用应用程序的过程中用户下沉。 作为一个定制…

IE10浏览器在Win8删除网页浏览历史

IE10浏览器在Win8删除网页浏览历史

历史记录,浏览器,删除,溶液,网页浏览,一般的Win8集成IE10浏览器。如果要删除Web浏览历史记录,则引用方法如下所示。 打开浏览器,点在顶部;工具> Internet选项菜单,打开Internet选项;设置窗口(下),点击下面删除按钮。 在新窗口中(如下图所示),将根据…

PHP验证代码不显示只有一个小的红

PHP验证代码不显示只有一个小的红

红叉,验证,显示,解决方案,只有一个,最近,我想自己学习PHP。我做了一个验证码,但是我不知道怎么做。下面的图片总是出现一个红色的小叉,但是没有显示验证代码,原因如下。 在修改之前,有如下错误。 (1)修订步骤如下,原因是Apache权限未打开, (2)单击Ope…

ashmaisv.exe过程安全不安全ashmai

ashmaisv.exe过程安全不安全ashmai

过程,信息查询,不安全,电脑软件,ashmaisv,点评:ashmaisv.exe是由ALWIL的杀毒产品的一部分 进程文件:ashmaisv或ashmaisv.exe 进程名称:Avast的反病毒组件 过程类别:安全风险的过程 英文描述: ashmaisv.exe是Avast的反病毒应用程序从Alwil应用…

如何更改百度帐户的ID(解决方案)

如何更改百度帐户的ID(解决方案)

百度,解决方案,帐户,如何更改,电脑软件,问题: 由于前段时间百度和其他一些贴吧逗嘴,现在一直缠着,现在想改变身份的要重新登记,而不是原来的身份在一些数据。我想知道是否有办法改变吗 答案uff1a 容许 u3002by绑定的邮箱,然后重新绑定邮箱,参考…

Win8开始菜单没有看到详细的解决方

Win8开始菜单没有看到详细的解决方

解决方案,开始菜单,详细,电脑软件,点评:很多人都很惊讶当你安装Windows8消费者预览版。最传统的开始菜单丢失了。不必担心,萧边帮助您解决这个问题。请读课文。 第一步:首先,启动桌面版Windows 8上的资源管理器,单击工具栏上的检查复选框,隐藏项…

unins000.exe-unins000是什么意思

unins000.exe-unins000是什么意思

电脑软件,exe,综述:简要介绍了unins000.exe - unins000过程 进程文件:unins000或unins000.exe 过程名称:联合国安装服务 过程类别:安全风险的过程 英文描述: unins000.exe是一种流行的进程名称与联合国的许多安装服务,跑的时候一个产品不需安装…

利用shell脚本实现远程mysql自动查

利用shell脚本实现远程mysql自动查

查询,脚本,实现远程,电脑软件,shell,以下脚本是远程数据库查询的简单命令。我相信你能读懂。这对一些需要每天自动检查数据库或执行一些句子的兄弟来说是很有帮助的。 复制代码代码如下所示: # /斌/ SH! 192.168.5.40主机= 用户= ABC 通过= …

PHP记录是累积的,显示了第二个的总

PHP记录是累积的,显示了第二个的总

显示,第二个,总长度,电脑软件,PHP,现在MySQL数据库中有一个包含三个记录的持续时间字段的测试表: 00:22:32 13:42:21 134:42:21 它表示时间的长度,但是保存类型是文本。 现在,您如何使用PHP将这些记录添加到总长度的最终结果中 复制代码代码…

PHP调试安装技巧

PHP调试安装技巧

调试,安装,技巧,电脑软件,PHP,这个计划是ZendDebugger调试配置。它已经配置了很长时间,没有成功配置。在phpinfo,ZendDebugger是不可行的。经调查,发现PHP5.3是个问题。必须先卸货。本文介绍了使用Xdebug。 软件安装太简单,无法分别执行以下命…