Как отсортировать по сложному первичному ключу?

Допустим, есть таблица книжных полок, на которых стоят книги:
CREATE TABLE `bookshelf` (
	`bookshelf_id` VARCHAR(10) NOT NULL,
	`book_name` VARCHAR(512) NOT NULL,
	`book_id` VARCHAR(10) NOT NULL,
	PRIMARY KEY (`bookshelf_id`, `book_name`(128), `book_id`)
);

Мне нужно получить пагинацию, в порядке, заданном PRIMARY KEY.
EXPLAIN SELECT * FROM `bookshelf` ORDER BY `bookshelf_id` LIMIT 5;
говорит, что будет использован PRIMARY KEY и просмотрено 5 записей, но понятно, что книги то отсортированы не будут.
EXPLAIN SELECT * FROM `bookshelf` ORDER BY `bookshelf_id`, `book_name` LIMIT 5;
говорит, что будет просматривать всю таблицу.
Как же сделать так, чтобы БД сортировала только по части поля `book_name` в соответствии с PRIMARY KEY?
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
https://dev.mysql.com/doc/refman/8.0/en/order-by-o...
In some cases, MySQL cannot use indexes to resolve the ORDER BY, although it may still use indexes to find the rows that match the WHERE clause. Examples:
- There is an index on only a prefix of a column named in the ORDER BY clause. In this case, the index cannot be used to fully resolve the sort order. For example, if only the first 10 bytes of a CHAR(20) column are indexed, the index cannot distinguish values past the 10th byte and a filesort is needed.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы