0

我有一个奇怪的 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;

第一个示例比接下来的 2 个示例快约 5 倍。另一个奇怪的事情是它取决于服务器和可能的 mysql 版本。在一台服务器上,变量在 where 子句中的使用方式无关紧要,但在另一台服务器上却如此。我错过了什么吗?为什么在 where 子句中带有变量的直接 sql 语句比使用从字符串构建并准备/执行的 sql 查询的语句要慢得多?

4

1 回答 1

0

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

于 2018-08-02T09:39:11.687 回答