powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса на большой таблице ~ 40 GB
7 сообщений из 7, страница 1 из 1
Оптимизация запроса на большой таблице ~ 40 GB
    #39272871
Serious Cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, друзья!

Есть таблица - 300 млн строк и размером ~40 GB

Простая структура [owner_id, Artist, Title] (список песен пользователей)

Нужно выбрать количество сопадений по песням (Artist+Title) для заданного пользователя @user_id со всеми остальными и вывести в формате [user_id:кол-во_совпадений]

На данный момент запрос такой:

SELECT d2.owner_id, COUNT(*) AS kolvo
FROM data d1
JOIN data d2 USING(Artist,Title)
WHERE d1.owner_id = @user_id
GROUP BY d1.owner_id


Индекы [Artist,Title] и [owner_id], движок InnoDB

Но с ростом таблицы пропорционально увеличивается время выполнения запроса и на данный момент он выполняется около минуты

Есть ли идеи как оптимизировать данную задачу на программном уровне?

Заранее большое спасибо!
...
Рейтинг: 0 / 0
Оптимизация запроса на большой таблице ~ 40 GB
    #39272941
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serious CatНа данный момент запрос такой:

SELECT d2.owner_id, COUNT(*) AS kolvo
FROM data d1
JOIN data d2 USING(Artist,Title)
WHERE d1.owner_id = @user_id
GROUP BY d1.owner_idизвините за мой французский, начешуя?

Код: sql
1.
2.
3.
SELECT COUNT(distinct Artist,Title) AS kolvo 
FROM data d1 
WHERE d1.owner_id = @user_id 
...
Рейтинг: 0 / 0
Оптимизация запроса на большой таблице ~ 40 GB
    #39272944
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или вам для каждого юзера надо получить совпадения со всеми остальными ? ну так тогда от фулскана(индексов, но они у вас тоже немаленькие) вам не уйти, как ни старайтесь.
...
Рейтинг: 0 / 0
Оптимизация запроса на большой таблице ~ 40 GB
    #39273105
Serious Cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, да, именно со всеми остальными...
...
Рейтинг: 0 / 0
Оптимизация запроса на большой таблице ~ 40 GB
    #39273481
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serious Cat, хз, вроде бы оптимизировать уже нечего. Разве что... В групбае у вас опечатка или ошибка? По смыслу запроса должно быть d2.owner_id.
...
Рейтинг: 0 / 0
Оптимизация запроса на большой таблице ~ 40 GB
    #39274443
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirSerious CatНа данный момент запрос такой:

SELECT d2.owner_id, COUNT(*) AS kolvo
FROM data d1
JOIN data d2 USING(Artist,Title)
WHERE d1.owner_id = @user_id
GROUP BY d1.owner_idизвините за мой французский, начешуя?

Код: sql
1.
2.
3.
SELECT COUNT(distinct Artist,Title) AS kolvo 
FROM data d1 
WHERE d1.owner_id = @user_id 




запросы неверные, оба. первый почти правильный, нужен count distinct и правильная группировка. Правильная группировка заключается в том, что группировки вообще не нужно.

distinct возможно тоже не нужен в зависимости от того, какие совпадения считаем - у данного пользователя (нужен) или у других пользователей (не нужен).
...
Рейтинг: 0 / 0
Оптимизация запроса на большой таблице ~ 40 GB
    #39274452
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
да, для оптимального выполнения
нужно два индекса, по owner, и по (artist, title)

при этом это будет потолок, лучше уже не будет.

хотя, если нужны дубликаты данного пользователя, можно чутка улучшить.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса на большой таблице ~ 40 GB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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