我有一个奇怪的 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 查询的语句要慢得多?