刚刚从MySQL服务器5.6迁移到5.7之后,其中一个差异就是使用用户会话变量时性能明显受到重大影响 .

为了模拟排名操作,我在SELECT语句中增加了一个用户变量 . 一个简单的简单例子是:

SET @rank:=0;
SELECT @rank:=@rank+1,col1,col2 FROM myTbl WHERE col2 > 1;

在5.6服务器和5.7服务器上使用这个 exact 语句,后者大约需要四倍的时间!其他一切都一样 . 这是更复杂的操作的一部分,但即使是上面显示的非常简单的例子也显示了这种行为 .

删除用户变量我在5.6和5.7上获得大致相同的执行时间

对我来说这没有意义 . 5.7中的用户变量是否有更多的锁定/完整性检查(与5.6相比)?

是否有一些不同的默认服务器设置差异可以解释这种行为?

任何想法赞赏!

(删除用户变量并进行后期处理当然是微不足道的,但我只是有一个“干净”的查询来直接给出结果)