Mysql存储过程对于delete语句来说很慢

时间:2013-05-16 20:18:27

标签: mysql stored-procedures

我有一个奇怪的mysql查询速度问题我试图包围我的头。我正在将一个mysql数据库从一个服务器移动到另一个服务器,并且一个应该更强大的服务器运行某些mysql查询的速度几乎是原始服务器的4倍。经过几天的调试后,我终于发现速度存在巨大差异,具体取决于存储过程中where子句中变量的使用方式。以下是一些例子:

快:

set @s = Concat('delete from visitids where VisitID=''',xVisitID,''' and OrgCode=''',xOrgCode,'''');
PREPARE stmt FROM @s;
EXECUTE stmt;

慢:

delete from visitids where VisitID=xVisitID and OrgCode=xOrgCode;

慢:

set @s = Concat('delete from visitids where VisitID=xVisitID and OrgCode=xOrgCode');
    PREPARE stmt FROM @s;
    EXECUTE stmt;

第一个例子比接下来的两个例子快5倍左右。另一个奇怪的是它取决于服务器和可能的mysql版本。在一台服务器上,如何在where子句中使用变量并不重要,而在另一台服务器上使用变量。我错过了什么吗?为什么在where子句中带有变量的直接sql语句比从字符串构建并准备/执行的sql查询要慢得多?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。在sp中,删除非常慢。直接运行delete语句时,delete语句非常快。