оптимизировать запрос SELECT, зная, что мы имеем дело с ограниченным диапазоном - PullRequest
1 голос
/ 21 марта 2012

Я пытаюсь включить в запрос MYSQL SELECT ограничение.Моя база данных структурирована таким образом, что если запись находится в первом столбце, то после этого можно найти только 5000 максимальных записей с одинаковым именем.

Пример:

mark
..mark repeated 5000 times
john
anna
..other millions of names

Таким образом, в этой таблице было бы более эффективно найти первую метку и продолжить поиск максимум 5000 строк по сравнению с этой.

Возможно ли сделать что-то подобное?

Ответы [ 4 ]

2 голосов
/ 21 марта 2012

Просто создайте индекс btree в столбце имени:

CREATE INDEX name ON your_table(name) USING BTREE

и mysql будет молча делать то, что вы хотите, каждый раз, когда ищет имя.

0 голосов
/ 21 марта 2012

На самом деле довольно сложно понять желаемый результат .... но я думаю, что это может идти в правильном направлении?

(SELECT name
FROM table
WHERE name = 'mark'
LIMIT 5000)

UNION

(SELECT name
FROM table
WHERE name != 'mark'
ORDER BY name)

Сначала будет получено до 5000 записей с первым именем mark, затем будет получен остаток - при необходимости вы можете добавить limit ко второму запросу ... используя UNION

Для повышения производительности убедитесь, что столбцы, используемые ORDER BY и WHERE, проиндексированы соответственно

0 голосов
/ 21 марта 2012

Если вы убедитесь, что столбец правильно проиндексирован, MySQL позаботится об оптимизации за вас.Изменить: Думая об этом, я подумал, что этот ответ будет полезен только если я укажу, как это сделать.пользователь никто не побил меня до глубины души: CREATE INDEX name ON your_table(name) USING BTREE

Это именно то, для чего предназначены индексы базы данных;это то, для чего они.MySQL будет использовать сам индекс для оптимизации поиска.

0 голосов
/ 21 марта 2012

Попробуйте с помощью:

SELECT name
FROM table
ORDER BY (name = 'mark') DESC
LIMIT 5000

Обычно вы сортируете отметку 1-й, затем остальные следуют и ограничиваются.

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