Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Насколько опасен или бесполезен limit n,1 / 9 сообщений из 9, страница 1 из 1
27.06.2014, 21:28:58
    #38682360
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насколько опасен или бесполезен limit n,1
Допустим у нас есть база на 2 млн записей.
Мы делаем сортированный запрос с условиями, которых бывает от трех до восьми + пару из них регулярники.
Мы хотим достать запись, но не по айдишнику, а по порядковому номеру в выдаче, например, выдача дала 9000 записей и мы хотим взять 5425-ую, а какой у неё айдишник это будет по-барабану.

Метод решения задачи:

Код: plsql
1.
select * from t where (... and x regex '...' and ...) order by (..., ...) limit 5425,1;



Вопрос:

насколько доставание всего одной записи в этом случае дорого с точки зрения подкапотной работы?
Есть ли вообще хоть какой-то смысл в этом limit x,1?
...
Рейтинг: 0 / 0
28.06.2014, 18:32:34
    #38682687
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насколько опасен или бесполезен limit n,1
Lumix,

такие запросы обрабатываются так:
выбираются 5425 записей, и выбирается одна.

т.е. по нагрузке на базу это почти как limit 5426, только с той разницей, что на клиента меньше данных передается.
...
Рейтинг: 0 / 0
29.06.2014, 15:12:33
    #38683029
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насколько опасен или бесполезен limit n,1
chabapokLumix,

такие запросы обрабатываются так:
выбираются 5425 записей, и выбирается одна.

т.е. по нагрузке на базу это почти как limit 5426, только с той разницей, что на клиента меньше данных передается.

да... печалька.. :-(

А какие есть принципиально дешевые варианты получения i-ой позиции в запросе?
Только индексированная вьюха что-ли??...
...
Рейтинг: 0 / 0
30.06.2014, 22:46:43
    #38684207
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насколько опасен или бесполезен limit n,1
Lumix,

нужно выделить условие, которое прописать во where. Причем, запрос должен идти только по индексированным полям.
а у вас там regex...

не представляю как это можно сделать.

возможно, если набор регулярок ограничен, то может их на этапе вставки выполнить и писать колонку соответствущую
...
Рейтинг: 0 / 0
01.07.2014, 20:09:56
    #38685104
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насколько опасен или бесполезен limit n,1
chabapokвозможно, если набор регулярок ограничен, то может их на этапе вставки выполнить и писать колонку соответствущую

Короче, кому интересно, в итоге вчера решили и сдали эту задачу так:

делается запрос
из него все айдишники складываются в обычный файл с паддингом 10, т. е. вот так

Код: sql
1.
2.
3.
4.
5.
6.
0000000001
0000000012
0000000751
0000003521
0050030005
...



Потом перед каждым запросом айдишник записи в базе достается из файла вот так так:
1. открываем файл
2. seek'аем до i * 10 позиции
3. читаем 10 байт
4. как файл перестал быть нужен (как все воркеры отработали) убиваем файл
profit!
...
Рейтинг: 0 / 0
02.07.2014, 04:59:38
    #38685304
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насколько опасен или бесполезен limit n,1
Lumix,

ааа... эээ... не проще ли было сделать временную таблицу {ид,порядковый номер} и работать с ней?
...
Рейтинг: 0 / 0
02.07.2014, 12:32:47
    #38685629
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насколько опасен или бесполезен limit n,1
Lumixchabapokвозможно, если набор регулярок ограничен, то может их на этапе вставки выполнить и писать колонку соответствущую

Короче, кому интересно, в итоге вчера решили и сдали эту задачу так:

делается запрос
из него все айдишники складываются в обычный файл с паддингом 10, т. е. вот так

Код: sql
1.
2.
3.
4.
5.
6.
0000000001
0000000012
0000000751
0000003521
0050030005
...



Потом перед каждым запросом айдишник записи в базе достается из файла вот так так:
1. открываем файл
2. seek'аем до i * 10 позиции
3. читаем 10 байт
4. как файл перестал быть нужен (как все воркеры отработали) убиваем файл
profit!

как верно заметили, чем єто отличаеться от временой таблицы?
а если у неё размер будет всегда меленький ,то можно и в памяти разместить.

если уже и в файл пошли, то зачем ересь делать???
айдишник у вас скажем 4 байтное число, так и пишите в файл 4байтные цисла а не фиговобайтные строки (function pack() | unpack())

незная детали задачи трудно сказать, но работать с шдд бегая по файлу на х8 байт и читать по 8 байт это сексуальное насилие над винчестером. но опять же если задача не вилика, то временая таблица и вперёд

ЗЫ
у меня есть временные таблицы мемори, используються для работы на дереве. вместо того чтобы помнить списки айдишников, ну или читать их из файлов временых.

ЗЫЗЫ
кстате, а как разруливаеться задача, чтобы два последние воркера не решили оба что удалит файл - другой воркер???
...
Рейтинг: 0 / 0
03.07.2014, 02:00:27
    #38686340
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насколько опасен или бесполезен limit n,1
Значит, у вас решение - специфическое для задачи. Такое тут бы никто не предложил.

О каких айдишниках может идти речь, если у вас там регэкспы?

И еще непонятно, как вы вытягиваете "все айдишники" из запроса. Если селектом в отдельной транзакции - это неправильно, и в много клиентской схеме обязательно даст глюки - рано или поздно будут подмешаны чужие айдишники. А если через last_insert_id() - то это правильно, но тогда почему "айдишники", а не "айдишник"?
...
Рейтинг: 0 / 0
03.07.2014, 13:50:16
    #38686805
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насколько опасен или бесполезен limit n,1
LumixА какие есть принципиально дешевые варианты получения i-ой позиции в запросе?
Только индексированная вьюха что-ли??...

Никаких нет.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Насколько опасен или бесполезен limit n,1 / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]