我想从大型数据表中获取一定范围的数据。
我的桌子结构是: 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行以提供数据。
因此,我想避免进行所有行扫描以获取数据。
请给我解决这个问题的方法
预先感谢