Задавайте вопросы, мы ответим
Вы не зашли.
Есть БД(большая более 800000 записей), необходимо выбрать определенное количество записей по группам(групп может быть от одной до 1200).
1. вариант который попробовал это через UNION:
Неактивен
Первый вариант с заменой union на union all должен работать быстрее при наличии нужного индекса (plocid, pcount, prandval).
Неактивен
попробовал UNION ALL, производительность осталась такая же. Поля проиндексированы, возможно нужно как то иначе индексировать , у меня стоит IndexType: Normal, Index method: btree
Неактивен
Нужен составной индекс на 3 поля.
Неактивен
Что касается второго варианта с переменными, то можно было бы перенести сортировку во from-подзапрос, но это не будет работать в новых версиях http://sqlinfo.ru/forum/viewtopic.php?id=6934&p=1
Другой вариант, перенести условие в часть select:
select pid, pphone, plocid from (
SELECT pid, pphone, plocid, if((@x1<=48 AND plocid = 37,(@x1:=@x1+1),0) x1,
if((@x2<=14 AND plocid = 92,(@x2:=@x2+1),0) x2
FROM phones ORDER BY pcount, prandval) t
WHERE x1<>0 or x2<>0;
Но это как минимум полный скан таблицы.
Переменные ускоряют запросы, но это относится к узкому классу задач, см http://webew.ru/articles/3923.webew
Неактивен
Большое спасибо за помощь. Буду проверять тестировать. И за статью спасибо, уверен что поможет.
Хотя думаю, что необходимо поменять подход к решению задачи.
Если будет хорошее решение обязательно тут отпишусь.
Неактивен