有这样一个表
CREATE TABLE `block` (
`ID` int(11) NOT NULL,
`BlockID` int(11) NOT NULL,
`Status` tinyint(4) NOT NULL,
PRIMARY KEY (`ID`),
INDEX `BlockID`(`BlockID`) USING BTREE,
INDEX `Status`(`Status`) USING BTREE
) ENGINE = MyISAM;
这个表大概有1千万的数据,其中,status就只有2个状态,要么等于0 ,要么等于1,来表示开关状态。
当我,select count(*) from block where status=1 的时候,因为这1千万数据,90%以上的都是status=1,导致在实际查询过程中,和全表扫描也没差了。敢问各路大神有没有什么好的解决办法。
小弟只是觉得分表是没必要的,因为这个表本来就是一体的。而且这种情况在我们库里面几百张表都存在,如果要水平去分,以后维护太难。
如果我遇到这种问题,大概会用两个方法,1,如果这是一个经常要用到的查询,直接建一个表维护这些数据,每次在增加或者修改状态的业务中去维护这个记录.2,如果主要用于分析,统计只是其中一部分而且数据比较静态,上千万的数据量,我就换clickhouse+sqlproxy