我有一个非常简单的查询,直接相当于
SELECT * FROM sometable t WHERE somecol = 'somevalue' ORDER BY createdon DESC LIMIT 0,20000;
当我在我的非集群开发机器上运行此查询时,它会在 0.07 秒内运行以返回 14k 行结果集。当我在我们的一个集群负载平衡服务器上运行相同的查询时,需要半个小时以上才能完成(如果它完全完成的话)。两种环境中的数据完全相同。
对集群框上的查询运行 EXPLAIN 会返回 6 的“行”值,而如果我在我的开发机器上运行它,它会返回 11177 的行值!
任何人都可以解释为什么会这样吗?我怀疑这是由于集群或网络延迟/同步问题造成的,但我不知道如何确定故障排除/诊断。
以下是有关设置的更多信息:
- 表中的总行数约为 19k,因此它甚至没有达到
LIMIT
限制 - MySQL 版本是 MySQL 服务器:5.1.56-ndb-7.1.15a-cluster-gpl
- Ubuntu 11.04(GNU/Linux 2.6.38-8-server x86_64)。
- 存储引擎在集群上是 NDBCLUSTER,在我的开发机器上是 InnoDB
表架构如下,其中 {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;
提前致谢。