Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / И вновь о выборке произвольной записи / 3 сообщений из 3, страница 1 из 1
24.07.2014, 16:59:12
    #38705238
Users
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И вновь о выборке произвольной записи
База MariaDB 10.10, сервер виртуальный, двухпроцессорный, 512 оперативки.

Вопрос номер 1.

Есть некая таблица с числом записей до 10 тысяч. Ни с чем не слинкована и не должна будет. Есть PK, аутоинкримент, int unsigned
Задача - максимально быстро выбрать из нее одну произвольную запись. Есть гарантия, что дырок в аутоинкрименте не будет.

Верно ли я ошибаюсь, что в данном случае разумнее на стороне php сгенерить некий произвольный id и сделать выборку
типа

select id from mytable where id = ValueFromPhp limit 1;

Вопрос номер 2.

Есть еще насколько таблиц значительно меньшего размера. До 2 тысяч записей самая крупная из них. Больше они не станут. Задача та же: максимально быстро выбрать одну произвольную запись. Гарантии, что дырок в аутоинкрименте не будет - нет.

Но тут у меня нет вызовов из php, a чисто базный код. Будет ли оптимальным вот это решение или на таком количестве и order by rand нормально отработает?

create function get_random_id() nondeterministic returns long
begin
select count(*) into @cnt from mytable where ...;
set @sql=concat('select id into @id from mytable where ... limit ',rnd*@cnt,',1;');
prepare stmt from @sql;
exec stmt;
return @id;
end;

Наконец, последний вопрос: можно ли как с использованием неких фич от MariaDB ускорить выборку? Подразумевается, что будут только небольшие запросы с небольшими же обьемами выборки, но их будет много.
...
Рейтинг: 0 / 0
24.07.2014, 17:03:49
    #38705247
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И вновь о выборке произвольной записи
SELECT * FROM random JOIN ( SELECT CEIL(RAND() * (SELECT MAX(id) FROM random)) AS id ) AS r2 USING (id)
...
Рейтинг: 0 / 0
24.07.2014, 17:08:00
    #38705253
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И вновь о выборке произвольной записи
если дырок не много то

Код: sql
1.
2.
3.
4.
5.
6.
SELECT name FROM random 
AS r1 JOIN 
( SELECT (RAND() * (SELECT MAX(id) FROM random)) AS id ) AS r2
 WHERE r1.id >= r2.id 
ORDER BY r1.id ASC 
LIMIT 1
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / И вновь о выборке произвольной записи / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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