用存储过程比php是不是效率快,php+mysql中存储过程性能容易比较

php+mysql中存储过程性能简单比较

PHP+MYSQL中,使用MYSQL的存储过程其实是很好的,而且效率还会快点的,

在这里,小结复习下MYSQL的用法吧,使用的是PDO

1

//不使用存储过程

$time = microtime(TRUE);

$mem = memory_get_usage();

$dsn = 'pgsql:host=localhost;dbname=gonzalo;port=5432';

$user = 'user';

$password = 'password';

$conn = new PDO($dsn, $user, $password);

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$conn->beginTransaction();

$stmt = $conn->prepare('delete from web.tbltest');

$stmt->execute();

$stmt = $conn->prepare('INSERT INTO web.tbltest (field1) values (?)');

foreach (range(0,1000) as $i) {

$stmt->execute(array($i));

}

$conn->commit();

print_r(array('memory' => (memory_get_usage() - $mem) / (1024 * 1024), 'seconds' => microtime(TRUE) - $time));

2 使用存储过程

存储过程的写法:

CREATE OR REPLACE FUNCTION web.method1()

RETURNS numeric AS

$BODY$

BEGIN

DELETE FROM web.tbltest;

FOR i IN 0..1000 LOOP

INSERT INTO web.tbltest (field1) values (i);

END LOOP;

RETURN 1;

END;

$BODY$

LANGUAGE plpgsql VOLATILE

COST 100;

$time = microtime(TRUE);

$mem = memory_get_usage();

$dsn = 'pgsql:host=localhost;dbname=gonzalo;port=5432';

$user = 'user';

$password = 'password';

$conn = new PDO($dsn, $user, $password);

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$conn->beginTransaction();

$stmt = $conn->prepare('SELECT web.method1()');

$stmt->execute();

$stmt->setFetchMode(PDO::FETCH_ASSOC);

$out = $stmt->fetchAll();

$conn->commit();

print_r(array('memory' => (memory_get_usage() - $mem) / (1024 * 1024), 'seconds' => microtime(TRUE) - $time));

可以看到结果对比如下:

without stored procedures

memory: 0.0023880004882812

seconds: 0.31109309196472

with stored procedures

memory: 0.0020713806152344

Seconds: 0.065021991729736

可以看到,用了存储过程的性能还是不错的

e7ce419cf2d6ad34d01da2ceb8829eed.png

微信 赏一包辣条吧~

023a57327877fb4402bcc76911ec18ea.png

支付宝 赏一听可乐吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值