powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL - сортировка миллиона записей по высчитываемой колонке
15 сообщений из 15, страница 1 из 1
MySQL - сортировка миллиона записей по высчитываемой колонке
    #40116987
Есть таблица товаров с ценами, есть таблица наценок в зависимости от диапазона цены.
Нужно перемножить цену на процент наценки в зависимости от диапазона и отсортировать по цене.
Заранее посчитать и хранить цену с наценкой нельзя, считать нужно в момент запроса.
Получается при каждом запросе нам нужно сначала все строки перемножить и только потом сортировать.
...
Рейтинг: 0 / 0
MySQL - сортировка миллиона записей по высчитываемой колонке
    #40116998
Егор Филиппов,

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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


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