|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
Есть таблица товаров с ценами, есть таблица наценок в зависимости от диапазона цены. Нужно перемножить цену на процент наценки в зависимости от диапазона и отсортировать по цене. Заранее посчитать и хранить цену с наценкой нельзя, считать нужно в момент запроса. Получается при каждом запросе нам нужно сначала все строки перемножить и только потом сортировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 12:24 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
Егор Филиппов, Сейчас обе таблицы загружаются во временные таблицы в память и затем уже идет перемножение и сортировка над временными таблицами, работает нормально до 100 тыс. записей, на 1 млн. запрос выполняется порядка 30 сек. это не допустимо, нужно решение как можно сделать это быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 12:35 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
Представление VIEW пробуйте. Хотя ... Есть еще вычисляемые поля, может быть как то задействовать https://dev.mysql.com/doc/refman/8.0/en/create-table-generated-columns.html Хотя.. Простой способ "влоб" Повесить Триггер на поля для "материализации" ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 14:20 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
Егор Филиппов Нужно перемножить цену на процент наценки в зависимости от диапазона и отсортировать по цене. А что потом? Вывести весь миллион пользователю на экран?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 14:51 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Что потом к задаче не имеет отношения ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 15:47 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
Alex_Ustinov, К сожалению такой вариант не подходит так как процент наценки может постоянно меняться, высчитывать заранее не представляется возможным, необходимо считать именно в момент запроса. Больше склоняемся к варианту что проблему нужно решать не прямым запросом а последовательностью действий по определенному алгоритму, то есть считать как то частями и потом объединять результаты. Пробую разные варианты, если найду оптимальное решение так же отпишусь в здесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 15:56 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
Егор Филиппов на 1 млн. запрос выполняется порядка 30 сек. это не допустимо, нужно решение как можно сделать это быстрее. у меня 10 000 000 записей , в поле varchar(266) поиск по like %****% (где **** - заранее отсутствующая комбинация, т.е. шмон по всем записям) 4.5сек твои 30сек для умножения - явно что-то надо менять в кансерватории ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 17:06 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
вадя, Неверно так сравнивать, вы делаете поиск по одной таблице, я умножение колонок из разных таблиц. Да и не в этом суть, сам принцип обработки всех записей в одном запросе скорее всего неверен. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 17:45 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
Егор Филиппов Егор Филиппов, Сейчас обе таблицы загружаются во временные таблицы в память и затем уже идет перемножение и сортировка над временными таблицами, работает нормально до 100 тыс. записей, на 1 млн. запрос выполняется порядка 30 сек. это не допустимо, нужно решение как можно сделать это быстрее. что такое 30 секунд - это общее время двух фаз вашего процесса - создание временных таблиц + перемножение, или время только второй фазы? Отказаться полностью или частично от формирования своих временных таблиц не пробовали? Сколько у вас диапазонов наценок, зависят ли они еще от чего-то, кроме собственно цены? Покажите ваш "перемножающий" запрос. Если там "мама-не-горюй" для чтения, какой-то текстовый комментарий дайте, описывающий ваше правило умножения, что вы ходите получить. И, кстати, по какой причине 30 секунд вы объявили неприемлемым временем. Какое для этого есть содержательное основание, кроме "я так хочу". ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 17:52 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
Егор Филиппов сам принцип обработки всех записей в одном запросе скорее всего неверен. надо смотреть план выполнения надо смотреть время выполнения без сортировки и прочее, прежде чем делать такие выводы ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 18:01 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
booby, Видимо вы не поняли суть проблемы, если вы не решали подобные задачи то лучше не тратить время, просто пройдите мимо. Хотите разобраться, сделайте 2 тестовые таблицы в одну из которой добавьте 1 миллион записей, во второй таблице не важно сколько будет записей, затем перемножьте колонку первой таблицы на рандомное число из второй и увидите суть проблемы: 1 млн * 1 млн = 1 трл. операций, приблизительно 30 сек. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 21:22 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
Егор Филиппов booby, Видимо вы не поняли суть проблемы, если вы не решали подобные задачи то лучше не тратить время, просто пройдите мимо. Хотите разобраться, сделайте 2 тестовые таблицы в одну из которой добавьте 1 миллион записей, во второй таблице не важно сколько будет записей, затем перемножьте колонку первой таблицы на рандомное число из второй и увидите суть проблемы: 1 млн * 1 млн = 1 трл. операций, приблизительно 30 сек. я-то уже прошел, а вам, хотя бы для самого себя, неплохо было бы перевести на русский язык, что именно вы сейчас написали. Удачи в ожидании добрых советов. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 21:26 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
booby, Извините если выразился грубо. Наверное не так сформулировал мысль, ошибся, хотел написать что на каждую строку нам нужно сделать отдельный select что бы получить наценку, в итоге слишком много вложенных запросов, и объединение тоже не помогает решить проблему. В общем не какого разумного решения не нашел кроме как все таки заранее считать цены, это накладывает определенные ограничения, но похоже придется делать именно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 22:09 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
Егор Филиппов Получается при каждом запросе нам нужно сначала все строки перемножить и только потом сортировать. Получается. Вы выбираете 1 м цифр (надеюсь не строк) и пересчитываете по условию. Егор Филиппов нужно решение как можно сделать это быстрее. Создайте таблицу [ваш формат цены] и таблицу [ваш формат наценок] с сопоставимыми кардинальностями и всеми нужными индексами. Перемножьте. Если НЕ быстрее чем сейчас у вас - надо добавить память и процессор. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2021, 05:41 |
|
MySQL - сортировка миллиона записей по высчитываемой колонке
|
|||
---|---|---|---|
#18+
Егор Филиппов Что потом к задаче не имеет отношения Зато имеет отношение к решению. Ежу понятно, что сортировать миллион записей если из них нужна только тысяча - зря время терять. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2021, 14:39 |
|
|
start [/forum/topic.php?fid=47&msg=40117102&tid=1827855]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
219ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 243ms |
total: | 572ms |
0 / 0 |