我正在尝试对存储过程进行基准测试。
select benchmark(100000000,(select 1));
这个基准工作
但以下基准没有:
do benchmark(1000,(call test_login_user('a')));
它会产生以下错误:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'call xpofb_login_user('a')))' at line 1
如何解决问题?
答案 0 :(得分:5)
您无法使用benchmark()执行此操作,但您可以创建一个存储过程来执行此操作。
以下是一个例子:
delimiter $$
create procedure benchmark_test_login_user (p_username varchar(100),
p_count int unsigned)
begin
declare v_iter int unsigned;
set v_iter = 0;
while v_iter < p_count
do
call test_login_user(p_username);
set v_iter = v_iter + 1;
end while;
end $$
delimiter ;
call benchmark_test_login_user('a',1000);
答案 1 :(得分:1)
你不能
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_benchmark
只能使用标量表达式。虽然表达式可以是子查询,但它必须返回单个列,最多只返回一行。例如,如果表t具有多个列或多个行,则BENCHMARK(10,(SELECT * FROM t))将失败。