php mysql中儲存過程效能簡單比較

2021-08-31 10:40:46 字數 2014 閱讀 1319

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)

$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

可以看到,用了儲存過程的效能還是不錯的

Oracle中儲存過程

1 建立乙個儲存過程 create or replace procedure pro name parameter1 parameter2 is as begin plsql sentences pl sql語句,儲存過程功能實現的主體 exception dowith sentences 異常處理...

mysql中儲存過程

delimiter,簡單解釋下這個命令的用途,在mysql中每行命令都是用 結尾,回車後自動執行,在儲存過程中 往往不代表指令結束,馬上執行,而delimiter原本就是 的意思,因此用這個命令轉換一下 為 這樣只有收到 才認為指令結束可以執行 檢視myql中已經存在的儲存過程 show proce...

mysql中儲存過程

儲存過程,其本質還是函式 但其規定 不能有返回值 說明 1,in 用於設定該變數是用來 接收實參資料 的,即 傳入 預設不寫,就是in 2,out 用於設定該變數是用來 儲存儲存過程中的資料 的,即 傳出 即函式中必須對它賦值 3,inout 是in和out的結合,具有雙向作用 4,對於,out和i...