Как получить частичные данные в некотором пределе из большой таблицы данных? - PullRequest
0 голосов
/ 16 ноября 2018

Я хочу получить некоторый диапазон данных из большой таблицы данных.

Моя таблица выглядит так: 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

В этой таблице столбец Position имеет порядок дочерних данных и изменяется в соответствии с операциями, такими как вверх / вниз, вставка и удаление.

Итак, в приведенном выше примере 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 строк, чтобы получить данные.

Итак, я хочу избежать сканирования всех строк для получения данных.

Пожалуйста, дайте мне решение этой проблемы

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...