Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL - сортировка миллиона записей по высчитываемой колонке / 15 сообщений из 15, страница 1 из 1
03.12.2021, 12:24
    #40116987
MySQL - сортировка миллиона записей по высчитываемой колонке
Есть таблица товаров с ценами, есть таблица наценок в зависимости от диапазона цены.
Нужно перемножить цену на процент наценки в зависимости от диапазона и отсортировать по цене.
Заранее посчитать и хранить цену с наценкой нельзя, считать нужно в момент запроса.
Получается при каждом запросе нам нужно сначала все строки перемножить и только потом сортировать.
...
Рейтинг: 0 / 0
03.12.2021, 12:35
    #40116998
MySQL - сортировка миллиона записей по высчитываемой колонке
Егор Филиппов,

Сейчас обе таблицы загружаются во временные таблицы в память и затем уже идет перемножение и сортировка над временными таблицами, работает нормально до 100 тыс. записей, на 1 млн. запрос выполняется порядка 30 сек. это не допустимо, нужно решение как можно сделать это быстрее.
...
Рейтинг: 0 / 0
03.12.2021, 14:20
    #40117036
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL - сортировка миллиона записей по высчитываемой колонке
Представление VIEW пробуйте.
Хотя ...

Есть еще вычисляемые поля, может быть как то задействовать
https://dev.mysql.com/doc/refman/8.0/en/create-table-generated-columns.html
Хотя..


Простой способ "влоб"
Повесить Триггер на поля для "материализации"
...
Рейтинг: 0 / 0
03.12.2021, 14:51
    #40117051
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL - сортировка миллиона записей по высчитываемой колонке
Егор Филиппов
Нужно перемножить цену на процент наценки в зависимости от диапазона и отсортировать по цене.

А что потом? Вывести весь миллион пользователю на экран?..
...
Рейтинг: 0 / 0
03.12.2021, 15:47
    #40117076
MySQL - сортировка миллиона записей по высчитываемой колонке
Dimitry Sibiryakov,

Что потом к задаче не имеет отношения
...
Рейтинг: 0 / 0
03.12.2021, 15:56
    #40117078
MySQL - сортировка миллиона записей по высчитываемой колонке
Alex_Ustinov,

К сожалению такой вариант не подходит так как процент наценки может постоянно меняться, высчитывать заранее не представляется возможным, необходимо считать именно в момент запроса. Больше склоняемся к варианту что проблему нужно решать не прямым запросом а последовательностью действий по определенному алгоритму, то есть считать как то частями и потом объединять результаты.
Пробую разные варианты, если найду оптимальное решение так же отпишусь в здесь.
...
Рейтинг: 0 / 0
03.12.2021, 17:06
    #40117102
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL - сортировка миллиона записей по высчитываемой колонке
Егор Филиппов
на 1 млн. запрос выполняется порядка 30 сек. это не допустимо, нужно решение как можно сделать это быстрее.
версия бд?
у меня 10 000 000 записей , в поле varchar(266) поиск по like %****% (где **** - заранее отсутствующая комбинация, т.е. шмон по всем записям) 4.5сек
твои 30сек для умножения - явно что-то надо менять в кансерватории
...
Рейтинг: 0 / 0
03.12.2021, 17:45
    #40117122
MySQL - сортировка миллиона записей по высчитываемой колонке
вадя,

Неверно так сравнивать, вы делаете поиск по одной таблице, я умножение колонок из разных таблиц. Да и не в этом суть, сам принцип обработки всех записей в одном запросе скорее всего неверен.
...
Рейтинг: 0 / 0
03.12.2021, 17:52
    #40117125
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL - сортировка миллиона записей по высчитываемой колонке
Егор Филиппов
Егор Филиппов,

Сейчас обе таблицы загружаются во временные таблицы в память и затем уже идет перемножение и сортировка над временными таблицами, работает нормально до 100 тыс. записей, на 1 млн. запрос выполняется порядка 30 сек. это не допустимо, нужно решение как можно сделать это быстрее.

что такое 30 секунд - это общее время двух фаз вашего процесса - создание временных таблиц + перемножение, или время только второй фазы?

Отказаться полностью или частично от формирования своих временных таблиц не пробовали?

Сколько у вас диапазонов наценок, зависят ли они еще от чего-то, кроме собственно цены?
Покажите ваш "перемножающий" запрос.
Если там "мама-не-горюй" для чтения, какой-то текстовый комментарий дайте, описывающий ваше правило умножения, что вы ходите получить.

И, кстати, по какой причине 30 секунд вы объявили неприемлемым временем.
Какое для этого есть содержательное основание, кроме "я так хочу".
...
Рейтинг: 0 / 0
03.12.2021, 18:01
    #40117130
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL - сортировка миллиона записей по высчитываемой колонке
Егор Филиппов
сам принцип обработки всех записей в одном запросе скорее всего неверен.
такой подход неверен. в запросах может участвовать и более 2 таблиц и ничего субд справляется

надо смотреть план выполнения
надо смотреть время выполнения без сортировки
и прочее, прежде чем делать такие выводы
...
Рейтинг: 0 / 0
03.12.2021, 21:22
    #40117216
MySQL - сортировка миллиона записей по высчитываемой колонке
booby,

Видимо вы не поняли суть проблемы, если вы не решали подобные задачи то лучше не тратить время, просто пройдите мимо.
Хотите разобраться, сделайте 2 тестовые таблицы в одну из которой добавьте 1 миллион записей, во второй таблице не важно сколько будет записей, затем перемножьте колонку первой таблицы на рандомное число из второй и увидите суть проблемы: 1 млн * 1 млн = 1 трл. операций, приблизительно 30 сек.
...
Рейтинг: 0 / 0
03.12.2021, 21:26
    #40117219
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL - сортировка миллиона записей по высчитываемой колонке
Егор Филиппов
booby,

Видимо вы не поняли суть проблемы, если вы не решали подобные задачи то лучше не тратить время, просто пройдите мимо.
Хотите разобраться, сделайте 2 тестовые таблицы в одну из которой добавьте 1 миллион записей, во второй таблице не важно сколько будет записей, затем перемножьте колонку первой таблицы на рандомное число из второй и увидите суть проблемы: 1 млн * 1 млн = 1 трл. операций, приблизительно 30 сек.

я-то уже прошел, а вам, хотя бы для самого себя, неплохо было бы перевести на русский язык, что именно вы сейчас написали.
Удачи в ожидании добрых советов.
...
Рейтинг: 0 / 0
03.12.2021, 22:09
    #40117248
MySQL - сортировка миллиона записей по высчитываемой колонке
booby,

Извините если выразился грубо. Наверное не так сформулировал мысль, ошибся, хотел написать что на каждую строку нам нужно сделать отдельный select что бы получить наценку, в итоге слишком много вложенных запросов, и объединение тоже не помогает решить проблему. В общем не какого разумного решения не нашел кроме как все таки заранее считать цены, это накладывает определенные ограничения, но похоже придется делать именно так.
...
Рейтинг: 0 / 0
04.12.2021, 05:41
    #40117310
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL - сортировка миллиона записей по высчитываемой колонке
Егор Филиппов
Получается при каждом запросе нам нужно сначала все строки перемножить и только потом сортировать.


Получается. Вы выбираете 1 м цифр (надеюсь не строк) и пересчитываете по условию.

Егор Филиппов
нужно решение как можно сделать это быстрее.


Создайте таблицу [ваш формат цены] и таблицу [ваш формат наценок] с сопоставимыми кардинальностями и всеми нужными индексами. Перемножьте. Если НЕ быстрее чем сейчас у вас - надо добавить память и процессор.
...
Рейтинг: 0 / 0
04.12.2021, 14:39
    #40117356
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL - сортировка миллиона записей по высчитываемой колонке
Егор Филиппов
Что потом к задаче не имеет отношения

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


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