我已经按字段daynumber
对表格进行了分区。在白天我写入这个表格日志,然后计算一些统计数据。桌子很大,每天我都有〜3M新的排。该字段myField
被编入索引。与DISTINCT不一致COUNT
这个查询
SELECT COUNT(DISTINCT myField) FROM mytable WHERE daynumber=somevalue;
返回0,这是一个错误。
这个查询
SELECT COUNT(*) FROM (SELECT DISTINCT(myField) FROM mytable WHERE daynumber=somevalue) t;
返回正确的值。
对于某些daynumber
值,第一个查询正常工作。我试图重复那个分区,但没有任何效果。有什么建议么?
更新
表方案看起来像
CREATE TABLE `mytable` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`daynumber` INT(10) UNSIGNED NOT NULL,
`myField` VARCHAR(1024) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
... other fields
PRIMARY KEY (`daynumber`,`id`),
KEY `myField` (`myField`(20))
) ENGINE=MYISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
PARTITION BY LIST (daynumber)
(PARTITION day_810 VALUES IN (810) ENGINE = MyISAM,
PARTITION day_811 VALUES IN (811) ENGINE = MyISAM,
PARTITION day_812 VALUES IN (812) ENGINE = MyISAM
....)
+1查询不能是不一致的。空可以做一些时髦的东西。我的建议是将字段设置为不可为空,如果您打算将它们用于累计总数等。 – Spudley