繁体   English   中英

MySQL5.6 vs Percona 5.7隐式转换问题

[英]MySQL5.6 vs Percona 5.7 implicit conversion issue

我们最近开始测试从mySQL5.6到percona服务器5.7的升级以及tokuDB表的使用。 该数据库正在为我们的PHP 5.5应用程序提供服务,该应用程序使用PDO库进行参数化查询。

将具有相同数据的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表? 我可以设置是否将其重新打开吗?

目前尚不清楚,如果您尝试将5.6 TokuDB性能升级到5.7 TokuDB性能,或将5.6 InnoDB升级到5.7 TokuDB并进行比较,能否请您澄清并确定5.6和5.7的特定变体和版本?

如果到处都是TokuDB,则可能是由于错误/旧/空索引统计信息而导致索引选择错误。 5.7中还有许多SQL_MODE默认更改,其中一些更改可能也会影响行为。

在5.6和5.7实例上查看“ SHOW CREATE TABLE”和“ SHOW INDEXES FROM”的结果可能也很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM