我们面临的问题是,我们有一个查询,然后在我们的主DB上运行6-7秒,但是在我们的从DB上,这可能会占用更多的5+分钟。
我发现在主服务器上执行查询时的执行计划与从服务器上的执行计划不同。区别在于,在其中一个表上,从DB使用的索引与主表使用的索引不同。
更重要的是,当我在从数据库上的putty命令行执行这个非常相同的查询时,它实际上使用了与主DB相同的执行计划。只有当查询来自我们的前端应用程序并在从DB上执行时,执行计划才会改变。
作为一个快速修复,我在sql中添加了一个强制索引,以使用主数据库使用的索引,这似乎是一个部分修复,似乎只使用了多个索引的一部分。主DB使用密钥长度为7,而从数据库使用密钥长度为4。
所讨论的查询是一个包含多个联接的非常大的查询。正是在其中一个联接上,索引正在误入歧途,并且使用了不同的索引。这也是我把力指数放在这里的地方。
我们使用Mysql和MyISAM表。
我的问题是,是什么导致了这种行为,为什么在从命令行执行完全相同的查询时运行良好?
发布于 2014-07-22 07:50:41
我想回答这个问题--任何人都有同样的问题,我们发现我们的问题的答案是在数据库的连接中设置以下内容
mysqli_query($conn, "SET COLLATION_CONNECTION = 'utf8_unicode_ci';");或者在代码点火器里。
$db['slave']['dbcollat'] = 'utf8_unicode_ci';但是,我们的表被设置为使用latin1而不是UTF8,一旦我们取出这个设置,我们的5+ min查询就完全停止并在与主服务器类似的时间运行。希望这对将来的人有帮助。
https://stackoverflow.com/questions/24573022
复制相似问题