powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ускорение сложного запроса в базе с десятками миллионов записей
8 сообщений из 8, страница 1 из 1
Ускорение сложного запроса в базе с десятками миллионов записей
    #39975840
ellunium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Помогите пожалуйста идеями, как можно ускорить запрос получения актуальной информации по товарам на последнюю дату. На данный момент в таблице порядка 10-15 миллионов записей. каждый день добавляется по 2-3 миллиона (лимит хранения 30-45 дней).
Использую такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select 
   is.id
   is.price,
   is.discount,
   t.last_date
from items_stats is
join (select 
         id,
         max(date) as last_date
         from items_stats group by 1
       ) t
  on is.id = t.id and is.date = t.last_date
where is.store_id = 1


Сейчас такой запрос занимает 24-28 секунд. Дальше будет еще больше. Есть ли какие способы оптимизировать этот запрос или может стоит как-то поменять хранение информации по товарам.

Пробовал вариант с оконной функцией на max(date), но он выполняется еще дольше, даже соединение с сервером обрывается (при дефолтных настройках)
...
Рейтинг: 0 / 0
Ускорение сложного запроса в базе с десятками миллионов записей
    #39975852
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ellunium,

explain запроса в студию.
Вангую, join c подзапросом не использует индекс. Как-то странно ты его группируешь.
И схему таблицы показывай. Там первичный ключ - это что?
...
Рейтинг: 0 / 0
Ускорение сложного запроса в базе с десятками миллионов записей
    #39975886
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
select 
   is.id
   is.price,
   is.discount,
   is.date as last_date
from items_stats is
where is.store_id = 1 and is.date=(SELECT MAX(date) FROM items_stats is1 WHERE is1.id=is.id)
...
Рейтинг: 0 / 0
Ускорение сложного запроса в базе с десятками миллионов записей
    #39975889
ellunium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

да, в группировке я оказывается опечатался в стартовом посте, а изменить сейчас его почему-то уже нельзя.
должно быть так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select 
   is.it_id
   is.price,
   is.discount,
   t.last_date
from items_stats is
join (select 
         it_id,
         max(date) as last_date
         from items_stats group by 1
       ) t
  on is.it_id = t.it_id and is.date = t.last_date
where is.store_id = 1



it_id - это айдишник товара. Первичный ключ у таблицы из приведенного примера - стандартный id (не it_id).
explain и схему скинуть смогу уже только завтра.

блин, а ведь по индексам прямо в точку похоже. У меня там индекс составной был только один - для запросов бэкенда. А вот для фронтенда я добавить забыл. Спасибо за наводку, завтра отпишусь по результатам!
...
Рейтинг: 0 / 0
Ускорение сложного запроса в базе с десятками миллионов записей
    #39975902
ellunium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,

Спасибо попробую
...
Рейтинг: 0 / 0
Ускорение сложного запроса в базе с десятками миллионов записей
    #39975932
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ellunium
запрос получения актуальной информации по товарам на последнюю дату
А для разных товаров последняя дата разная или каждый день ложится полный срез?
...
Рейтинг: 0 / 0
Ускорение сложного запроса в базе с десятками миллионов записей
    #39975971
ellunium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

некоторые товары обновляются несколько раз в день. Хоть поле осталось называться date там сейчас уже на самом деле сейчас тип datetime
...
Рейтинг: 0 / 0
Ускорение сложного запроса в базе с десятками миллионов записей
    #39975998
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ellunium
Пробовал вариант с оконной функцией на max(date)
а покажите этот вариант запроса и полный DDL таблицы, включая индексы.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ускорение сложного запроса в базе с десятками миллионов записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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