Общие > Базы данных
Отсортированная таблица
Макс:
--- Цитировать ---Dj Fly:
Предположим, у нас есть два интовых поля... id | rating
--- Конец цитаты ---
предлагаю от теории перейти к практике и показать реальную таблицу и реальные запросы которые ты делаешь.
Dj Fly:
Ok, существует несколько таблиц типа:
id | rating
В каждой из них может быть до полумиллиона записей...
На id повешен индекс
Запрос на выборку - склеивающий и выглядит следующим образом:
select test.a.id,(test.a.rating+test.b.rating+
test.c.rating+test.d.rating+test.e.rating)
from test.a,test.b,test.c,test.d,test.e where
test.a.id=test.b.id and test.a.id=test.c.id
and test.a.id=test.d.id and test.a.id=test.e.id limit 1000
Таким образом, у нас склеиваются до 5 таблиц по ID с тем, чтобы получить 1000 тех ID, которые обладают наивысшим рейтингом и содержатся в каждой из таблиц
В данном запросе нет директив типа order, дающих возможность получить ID с НАИВЫСШИМ рейтингом, но если бы таблицы были отсортированы изначально - этот запрос давал бы желаемый результат.
Применение инструкции order by rating, даже с повешенным индексом на поле rating замедляет операцию простой выборки из одной из таблиц, уж не говоря о запросе такого типа, ведь от-ордерить надо будет все 5 таблиц...
А вот полное сканирование дало бы сразу быстро желаемый результат, если бы таблицы были сразу отсортированы по полю rating
commander:
Dj Fly
Мы по моему уже обсуждали с тобой эту проблемму... тут тебе можно посоветовать перестать высасывать из php+mysql то что они тебе дать не могут... и перейти на системы которые позволят тебе достич желаемого результата...
Dj Fly:
Мы обсуждали подобную, но важно ли это...
Вопрос стоит так или иначе:
Есть ли такая возвожность?
Или нет?
И есть ли какие-либо предложения, способные хотя-бы навести на мысль к решению данной проблемы?
Макс:
создай еще одну таблицу:
id | sum_rating
Из названий полей идея ясна ?
Это конечно избіточность данных, но должно повысить скорость выборки
Навигация
Перейти к полной версии