如何从大数据表中获取某些限制的部分数据?

时间:2018-11-16 04:11:44

标签: mysql database

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

我的桌子结构是: 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;

假设样本数据为:

enter image description here

在此表中,“位置”列具有子数据的顺序,并且根据向上/向下,插入和删除等操作对其进行了更改。

因此,在上面的示例中,同一父级的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行以提供数据。

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

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

预先感谢

0 个答案:

没有答案