我有一个奇怪的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查询要慢得多?
答案 0 :(得分:0)
我遇到了同样的问题。在sp中,删除非常慢。直接运行delete语句时,delete语句非常快。