
1. 服务器只需要解析一次查询,这节约了解析和其他的开销
2. 因为服务器缓存了一部分执行计划,所以它只需要执行某些优化步骤一次
3. 通过二进制发送参数比通过ASCII 码要快的多。比如,通过二进制发送DATE 类型的参数只需要3 个字节,但通过ASCII 码发送要10 个字节。节约的效果对于BLOB 和TEXT 类型最为显著,因为它们可以成块的发送,而不是一个个的发送。二进制协议也帮助客户端节约了内存,同时减少了网络开销和数据从本身的类型转换为非二进制协议的开销。
4. 整个查询不会被发送到服务器,只有参数才会被发送,这减少了网络流量。
5. Mysql 直接把参数保存在服务器的缓冲区内,不需要在内存中到处copy 数据
6. 预处理语句对安全性也有好处,它不需要在应用程序中对值进行转义和加引号,这更加方便,并且减少了遭SQL 注入攻击的可能性。
好多人做法是,写两条条件相同的语句一条查询总数一条查询结果
select
count(*)
from
tab1
where
name
like
'aaa'
select
*
from
tab1
where
name
like
'aaa'
limit
0,10
还有别的办法吗?谢谢!
对我有用[0]丢个板砖[0]引用举报管理TOPrucypli(我要冰糖)等
级:
mysql_real_query查询后返回的结果如果正确,你必须用mysql_use_result或mysql_store_result来接收,调用完内容后用mysql_free_result来释放结果集,就是清零内存,实际上这几个都是指针,你给指针赋值就是将指针知道保存内容的内存首地址,如果你执行了mysql_free_result,实际上就是把mysql_store_result保存结果的那块内存给释放掉,你再store等于把指针指向被释放的内存,肯定返回NULL;你如果是用mysql_store_result,查询结果已经保存到你的内存了,只要你不free,那么随时可以去调用的,只是记得用mysql_data_seek去把指针指到你想要的位置就行,等所有 *** 作完成后再free就可以了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)