我有一个非常简单的查询,直接等同于
SELECT * FROM sometable t WHERE somecol = 'somevalue' ORDER BY createdon DESC LIMIT 0,20000;
当我在非集群开发机器上运行此查询时,它以0.07秒的速度运行以返回14k行结果集。当我在我们的一个集群负载平衡服务器上运行相同的查询时,它需要超过半小时才能完成(如果它完全完成)。两种环境中的数据完全相同。
对群集框上的查询运行EXPLAIN会返回“row”值为6,而如果我在我的dev机器上运行它,则返回行值11177!
有人能说清楚为什么会这样吗?我怀疑这是集群或网络滞后/同步问题,但我不知道如何进行故障排除/诊断。
以下是有关设置的更多信息:
LIMIT
限制表模式如下,其中{X}是本地计算机上的InnoDB或生产服务器上的NDBCluster。
CREATE TABLE `sometable` (
`Id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`UserId` bigint(20) unsigned NOT NULL,
`Cookie` varchar(255) DEFAULT NULL,
`somecol` varchar(30) DEFAULT NULL,
`IpAddress` varchar(255) DEFAULT NULL,
`SomeCollection` text,
`someothercolumn` decimal(6,2) NOT NULL,
`someothercolumn2` decimal(6,2) DEFAULT NULL,
`Result` tinyint(4) NOT NULL,
`Version` tinyint(4) NOT NULL,
`Source` varchar(255) DEFAULT NULL,
`CreatedOn` datetime NOT NULL,
PRIMARY KEY (`Id`),
KEY `CreatedOnIndex` (`CreatedOn`),
KEY `SomeColIndex` (`somecol`),
KEY `ResultIndex` (`Result`),
KEY `SomeCol2Index` (`someothercolumn2`)
) ENGINE={X} AUTO_INCREMENT=97043 DEFAULT CHARSET=latin1;
提前致谢。
答案 0 :(得分:0)
首先,您可能需要考虑是否确实需要MySQL群集,其性能和复杂性是许多人选择不使用它的原因。对于许多商店来说,一对MySQL Master-Master复制或Master-Slave复制已经足够了。其次,如果您必须继续使用当前的体系结构,可以在“somecol”列添加索引,首先尝试HASH,然后使用B-TREE索引,它们应该有所帮助,但性能仍然不如简单的主机实例。