Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Здравия желаю всем!
Есть две таблицы (упрощенно):
1. Шины: два столбца: ИД товара и цена.
2. Диски: два столбца: ИД товара и цена.
Задача соединить все шины со всеми дисками, сложить цены и отобрать первых 20 самых дешевых комплектов для отображения на первой странице.
Внимание, вопрос!
Если отсортировать шины по цене и лимитнуть до 20, далее отсортировать по цене диски и тоже лимитнуть до 20, потом перемножить друг на друга (т.е. 20х20), отсортировать по результирующей цене и лимитнуть до 20.
Будет ли это тоже самое, если перемножить все шины на все диски, отсортировать по результирующей цене и лимитнуть до 20. Просто иногда доходит до 1000x1000 и основательно замедляет запрос?
Неактивен
Первый вариант конечно куда быстрее второго получится - во втором ведь получается бинарное произведение двух этих множеств - миллион строк будет сгенерировано.
Не забудьте создать ключики на колонку с ценой (в обеих таблицах).
Неактивен
Важно, чтобы первый вариант дал тот же результат, что и второй, тогда в нем есть смысл.
Я как бы понимаю подсознательно, что результат должен быть один и тот же и по тестам так получается, но объяснить логически себе не могу. +)
Неактивен
Математически я тоже затруднюсь привести доказательство, но давайте от обратного - приведите контрпример . Можно не 20 элементов сделать, а поменьше, конечно.
Неактивен
Предположим, что есть такая пара, цена которой попадает в первых 20 комплектов, но один или оба элемента не попадают в 20-ку самых дешевых в своей группе.
Если оба элемента не попадают в 20-ку самых дешевых в своих группах, то и их сумма не попадет в 400 первых комплектов, потому что первую 400-ку составят комплекты из самых дешевых товаров.
xn - 20-я по дешевизне. n равно 20.
xn - 20-ый по дешевизне диск. n равно 20.
xi - шина, не входит в 20-ку. i больше 20.
yi - диск, входит в 20-ку. i меньше или равно 20.
Если xi+yi < xn+yn, а xn < xi, следует xn+yi < xi+yi
Т.е. xn+yi закроют 20 сумм, которые будут определенно дешевле xi+yi
Получается, что если шина не в 20-ке, то 20 более дешевых комплектов можно получить, если сложить диск yi с 20-ю более дешевыми шинами.
Как изложить это в формулах понятия не имею. +)
Неактивен
Страниц: 1