我们最近开始测试从mySQL5.6升级到percona服务器5.7和使用tokuDB表。该数据库服务于我们的PHP 5.5应用程序,它使用PDO库进行参数化查询。MySQL5.6 vs Percona 5.7隐式转换问题
将相同数据的percona加载到tokudb表中,并将性能与现有生产进行比较,我们立即注意到性能的巨大下降(速度降低了10倍)。对于下面的查询假设表有1200万行
我已经能够在5.7数据库向下缩小这个问题的事实,执行查询,例如当:
SELECT * FROM TABLE WHERE id='12345'; -- exec time 10.5sec
vs.
SELECT * FROM TABLE WHERE id=12345; -- exec time 1.3sec
其中id是列类型的整数。这是我的印象,我的研究似乎证实,当比较列是一个数字类型时,mySQL应该将'12345'隐式转换为12345,但是这似乎不会在mySQL5.7/Percona中发生。这是发生在mySQL5.6x
这里的问题是,这种行为,你需要明确地设置每个变量使用PDOStatement :: bindParam(ref http://php.net/manual/en/pdostatement.bindparam.php)的类型!这样做会导致所有准备好的语句接近全局重写,这些语句当前将参数数组传递给PDOStatement:execute(),它不支持显式类型设置!
所以 - 我的问题是这样的 - 在mySQL中有一些变化,所以隐式转换不是在5.7中完成,或者是Percona还是tokuDB表?有一个配置参数可以让我们重新打开它吗?
我会为答案提出一个奖励。 –
出于好奇,为什么迁移到Percona而不是更常见的MariaDB步骤? – Jacco
@Jacco - 因为Percona收购了tokutek。此外,Percona多年来一直是高性能mySQL领域的佼佼者。 – Ross