Задавайте вопросы, мы ответим
Вы не зашли.
Привет, всем!!!
Подскажите, плиз.
Есть большая табл. (порядка 10 мил. записей). Пользователи обращаются к ней с запросами на выборку данных.
Данные возвращаются в кол-ве 1000-5000 записей. Соответственно для этих целей организован пейджер, чтобы можно было удобно просматривать весь результат.
Каждый раз обращаться к огромной табл и делать повторные выборки это есть большая нагрузка, да и притормаживает. А учитывая что таких пользователей будет сотня а то и больше, можно как-то организовать, чтобы выборка для каждого из пользователей сохранялась у временной промежуточной таблице чтобы снизить нагрузку на одну общую таблицу?
Подумывал создать временных TEMPORARY таблицы, но они существуют до конца подключения и сразу уничтожаются! Может быть есть другой подход для решения данной задачи!
Спасибо за любой совет!
Отредактированно yuriy (24.10.2012 18:28:20)
Неактивен
yuriy написал:
Привет, всем!!!
Подскажите, плиз.
Есть большая табл. (порядка 10 мил. записей).
мы помним
yuriy написал:
Пользователи обращаются к ней с запросами на выборку данных.
Данные возвращаются в кол-ве 1000-5000 записей. Соответственно для этих целей организован пейджер, чтобы можно было удобно просматривать весь результат.
поясните, что значит возвращаются 1000-5000 записей? прям все отдаются скрипту? Обычно пагинаторы работают с использованием LIMIT x,y где x - текущее смещение передаваемое через url, а y - количество записей на страницу. При этом используется либо связка SQL_CALC_FOUND_ROWS + FOUND_ROWS() либо COUNT() + SELECT для подсчета общего количества найденных (но не возвращенных разумеется) строк. А у вас как? Покажите запросы?
yuriy написал:
Каждый раз обращаться к огромной табл и делать повторные выборки это есть большая нагрузка, да и притормаживает.
покажите нам что-то из этого, лучше всё:
1. структуру таблиц,
2. подтормаживающие запросы
3. результат их EXPLAIN
если верить вам, в том плане что вы реально вынимаете 5000 записей из базы, а потом с помощью скрипта-пагинатора отсеиваете например 25 для показа - то тормоза неизбежны и конечно временные таблицы вам не помогут. Кстати один раз я встречал такой "удивительный" подход.
yuriy написал:
А учитывая что таких пользователей будет сотня а то и больше, можно как-то организовать, чтобы выборка для каждого из пользователей сохранялась у временной промежуточной таблице чтобы снизить нагрузку на одну общую таблицу?
Подумывал создать временных TEMPORARY таблицы, но они существуют до конца подключения и сразу уничтожаются! Может быть есть другой подход для решения данной задачи!
Спасибо за любой совет!
Организовать такое можно.
1. выдаете пользователю в куку уникальный ключ
2. именем этого ключа именуете некую таблицу A типа CREATE TABLE IF NOT EXISTS usersearch_{ключ} LIKE {ваша большая таблица}
3. Делаете таблицу B с двумя колонками в которой храните пару имя_таблицы_usersearch_{ключ}/время последнего_обращения_к_ней
4. При первом поисковом запросе, то что нашли сохраняете в таблицу A:
Отредактированно Shopen (25.10.2012 01:20:26)
Неактивен
Спасибо за гениальный совет, обязательно попробую сделать... о результатах сообщу....
Неактивен