SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.09.2013 22:52:31

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

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

Здравия желаю всем!


Есть две таблицы (упрощенно):
1. Шины: два столбца: ИД товара и цена.
2. Диски: два столбца: ИД товара и цена.

Задача соединить все шины со всеми дисками, сложить цены и отобрать первых 20 самых дешевых комплектов для отображения на первой странице.

Внимание, вопрос!
Если отсортировать шины по цене и лимитнуть до 20, далее отсортировать по цене диски и тоже лимитнуть до 20, потом перемножить друг на друга (т.е. 20х20), отсортировать по результирующей цене и лимитнуть до 20.
Будет ли это тоже самое, если перемножить все шины на все диски, отсортировать по результирующей цене и лимитнуть до 20. Просто иногда доходит до 1000x1000 и основательно замедляет запрос?

Неактивен

 

#2 04.09.2013 23:00:57

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Оптимизация выборки ограниченного числа комплектных товаров по цене

Первый вариант конечно куда быстрее второго получится - во втором ведь получается бинарное произведение двух этих множеств - миллион строк будет сгенерировано.
Не забудьте создать ключики на колонку с ценой (в обеих таблицах).


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 05.09.2013 00:16:45

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: Оптимизация выборки ограниченного числа комплектных товаров по цене

Важно, чтобы первый вариант дал тот же результат, что и второй, тогда в нем есть смысл.
Я как бы понимаю подсознательно, что результат должен быть один и тот же и по тестам так получается, но объяснить логически себе не могу. +)

Неактивен

 

#4 05.09.2013 00:20:25

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Оптимизация выборки ограниченного числа комплектных товаров по цене

Математически я тоже затруднюсь привести доказательство, но давайте от обратного - приведите контрпример smile. Можно не 20 элементов сделать, а поменьше, конечно.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 05.09.2013 01:24:10

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: Оптимизация выборки ограниченного числа комплектных товаров по цене

Предположим, что есть такая пара, цена которой попадает в первых 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-ю более дешевыми шинами.

Как изложить это в формулах понятия не имею. +)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson