Документы говорят, что:
Большинство индексов MySQL (PRIMARY KEY, UNIQUE, INDEX и FULLTEXT) хранятся в B-деревьях.
Так что физически данные уже отсортированы по ключу. Мне нужна схема ключ-значение в MySQL с поддержкой запроса диапазона:
SELECT key, value FROM MyTable WHERE key >= key1 and key < key2;
Во многих (большинстве) примерах в Интернете я вижу, что люди добавляют ORDER BY
даже при выборе по первичному ключу.
Мои вопросы:
- Действительно ли здесь нужен ORDER BY, чтобы всегда сортировать результаты, и если да, то почему?
- Повлияет ли сортировка на производительность или она будет оптимизирована?
- Имеет ли смысл делать значения частью составного индекса, если они не слишком велики, например. просто цифры?
- Будет ли
SELECT key, value FROM MyTable WHERE key > key1 LIMIT 1;
возвращать следующий ключ, больший, чем key1, или любой ключ, больший, чем key1? Как надежно получать LT,LE,GT,GE точечные запросы?
(Мне это нужно в MySQL по почти «политическим» и инструментальным причинам, прежде чем переходить на другое существующее хранилище KV на основе B +-дерева, я уже выбрал лучший LMDB, поэтому вопросы касаются только имитации схемы в MySQL)