首页 > 解决方案 > 如何从大数据表中获取一定限度内的部分数据?

问题描述

我想从大型数据表中获取一些数据范围。

我的表结构是:child_table

`clustering_key` int(10) unsigned NOT NULL AUTO_INCREMENT,

`Parent_id` char(36) NOT NULL DEFAULT '',

`child_id` char(36) NOT NULL DEFAULT '',

`data` text, 

`position` int(10) unsigned NOT NULL DEFAULT '0',

PRIMARY KEY (`clustering_key`),

UNIQUE KEY `child_index` (`child_id`) USING BTREE,

KEY `position_index` (`position`),

FULLTEXT KEY `data_index` (`data`), 

CONSTRAINT `FK_child_table_parent_table` FOREIGN KEY (`Parent_id`) REFERENCES `parent_table` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) 

ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8;

假设样本数据是:

在此处输入图像描述

在该表中位置列有子数据的顺序,并根据向上/向下、插入和删除等操作而改变。

因此,在上面的示例中,同一父级的 9 个子行。我想按位置顺序获取 3 到 6 个子数据。

当我尝试执行查询时

Select *
FROM child_table
where Parent_id='8c002adc-9a1c-4eeb-94b6-72d3e30c3862'
order by Position
limit 3,6;

这个查询给了我正确的数据,但是 MySql 为此扫描了 9 行。假设 Parent 有 90000 个数据,因此 mysql 扫描所有 90000 行以提供数据。

所以,我想避免所有行扫描以获取数据。

请给我这个问题的解决方案

提前致谢

标签: mysqldatabase

解决方案


推荐阅读