我有一个性能问题,在使用选择查询处理十亿条记录时,我有一个表
CREATE TABLE `temp_content_closure2` (
`parent_label` varchar(2000) DEFAULT NULL,
`parent_code_id` bigint(20) NOT NULL,
`parent_depth` bigint(20) NOT NULL DEFAULT '0',
`content_id` bigint(20) unsigned NOT NULL DEFAULT '0',
KEY `code_content` (`parent_code_id`,`content_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
/*!50100 PARTITION BY KEY (parent_depth)
PARTITIONS 20 */ |
我使用了分区,它将通过细分表来提高性能,但在我的情况下它没有用,我的示例选择在这个表中
+----------------+----------------+--------------+------------+
| parent_label | parent_code_id | parent_depth | content_id |
+----------------+----------------+--------------+------------+
| Taxonomy | 20000 | 0 | 447 |
| Taxonomy | 20000 | 0 | 2286 |
| Taxonomy | 20000 | 0 | 3422 |
| Taxonomy | 20000 | 0 | 5916 |
+----------------+----------------+--------------+------------+
这里的 content_id 相对于 parent_dept 是唯一的,所以我使用 parent_depth 作为分区的键。在每个深度我有 2577833 行要处理,所以这里分区没有用,我从网站上得到了一个使用存档存储引擎的想法但它会使用全表扫描而不是在选择中使用索引,基本上 99% 我在这个表中使用选择查询,这个表每天都会增加它的计数。目前我在 mysql 数据库中,它有 5.0.1 版本。我对使用 nosql 数据库有一个想法,但是有什么方法可以在 mysql 中处理,如果你建议 nosql 意味着我可以使用 cassandra 还是 accumulo ?