MySQL在巨大的表和简单的SELECT上需要FORCE INDEX
我们有一个应用程序,它将来自不同来源的文章存储在MySQL表中,并允许用户检索按日期排序的那些文章。文章始终按来源进行过滤,因此对于客户端SELECT,我们始终有 WHERE source_id IN (...,...) ORDER BY date DESC/ASC 我们正在使用IN,因为用户有很多订阅(有些订阅有数千个)。 这是articles表的架构: CREATE TABLE `articles` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `source_id` INTEGER(11) UNSIGNED NOT NULL, `date` DOUBLE(16,6) NOT NULL, PRIMARY KEY (`id`), KEY `source_id_date` (`source_id`, `date`), KEY `date` (`date`) )ENGINE=InnoDB AUTO_INCREMENT=1 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' COMMENT=''; 我们需要(date)索引,因为有时我们在此表上运行后台操作,而没有按源进行过滤。但是,用户无法执行此操作。 该表有大约10亿条记录(是的,我们正在考虑分片以便将来...)。一个典型的查询如下所示: …