Mysql在不同服务器上运行不同的索引

时间:2014-07-04 11:12:35

标签: mysql sql indexing

我们面临的问题是我们有一个查询,然后在我们的主数据库上运行6-7秒,但在我们的从数据库上,这可能需要超过5分钟。

我发现在主服务器上执行时查询的执行计划与从服务器不同。不同之处在于,其中一个表的从属DB使用的索引与主使用的索引不同。

当我从slave数据库中的putty命令行执行这个相同的查询时,它实际上使用与主数据库相同的执行计划。执行计划仅在查询来自我们的前端应用程序时更改,并在从属DB上执行。

作为一个快速修复,我将一个FORCE INDEX放入sql中以使用master使用的索引,这似乎可以部分修复,因为似乎只使用了多索引的一部分。主数据库使用密钥长度7,而从服务器使用密钥长度4。

有问题的查询是一个包含多个连接的非常大的查询。正是在其中一个连接上,索引误入歧途并使用不同的索引。这也是我放置力量指数的地方。

我们正在使用Mysql和MyISAM表。

我的问题是,是什么原因导致这种行为?为什么当从命令行执行完全相同的查询运行正常时呢?

1 个答案:

答案 0 :(得分:0)

以为我会回答这个问题,任何人都有同样的问题,我们发现我们问题的答案是我们在与数据库的连接中设置以下内容

mysqli_query($conn, "SET COLLATION_CONNECTION = 'utf8_unicode_ci';");

或者在codeigniter。

$db['slave']['dbcollat'] = 'utf8_unicode_ci';

然而,我们的表设置为使用latin1而不是UTF8,一旦我们取出此设置,我们的5+分钟查询完全停止并在类似的时间内运行到主服务器。 希望这可以帮助将来的某个人。