关于存储过程,非常多的人难以理解除了方便以外,它还带来了什么。
我用手头的机器做了下面一个测试。暂且先不管机器类型,和表结构(其实表结构类似于这个帖子里面)。
DROP PROCEDURE IF EXISTS insert_n_rows;
delimiter //
CREATE PROCEDURE insert_n_rows (IN loops INT)
BEGIN
DECLARE count INT;
SET count =loops;
WHILE count > 0 DO
INSERT INTO my_table values(NULL,0,
‘wwwwwwmmmmmyyyyyysssssqqqqllllcccccoooooooomm’,
‘jjjjjjjjjjjjjjjjjjjjiiiiiiiiiiiiiiiiiiiiiddddddddddddddddeeeeeeeeee’);
SET count = count - 1;
END WHILE;
END;
//
delimiter ;
我试着调用这个存储过程插入了100万行。
后来又用客户端程序去一次插入1条这样的方式去执行100万次。
最后用客户端程序去一次插入1条这样的方式去执行100万次,且这个客户端使用mysqlproxy连接mysql。 下表显示了他们的区别
插入方式 所需时间 存储过程 51秒 客户端 142秒 客户端+proxy 181秒
存储过程的速度要快于其他两种方式,原因很大成分在于它节省了网络开销,SQL语言解析,优化等等过程。
但毕竟数据库不擅长于过程式代码,所以用存储过程可以处理一些简单和小的过程。至于复杂的逻辑,让外部的语言去处理吧。
具体可以看
http://www.mysqlsystems.com/?p=325
http://www.mysqlsystems.com
http://www.mysqlsystems.com/bbs