我已經按字段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