MySQL для выбора МАКСИМАЛЬНЫХ отличий двух столбцов

У меня есть таблица со следующими столбцами:

ItemCode VARCHAR
PriceA DECIMAL(10,4)
PriceB DECIMAL(10,4)

Таблица имеет около 1000 строк.

Мое требование проверить разницу (PriceA-PriceB) для каждого ряда, а затем показать топ 50 предметов которые имеют максимальные ценовые различия.

Есть два способа, которыми я могу реализовать это

1) Поверьте, что вычисление SQL не сложное, легкое и быстрое, поэтому я запускаю следующий запрос:

SELECT ItemCode, (PriceA - PriceB) AS PDiff  FROM testtable  ORDER BY PDiff DESC LIMIT 50

и во-вторых,

2) Добавьте еще один столбец (называется PriceDiff), в котором будет храниться разница (PriceA-PriceB).

Тем не менее, они должны быть вставлены вручную и требуют дополнительного места. Но он может просто запустить MAX(PriceDiff) выберите запрос для топ-50.

Мой вопрос — с точки зрения скорости и эффективности для веб-приложения (отображение результатов на веб-сайте / в приложении), какой из вышеуказанных методов лучше?

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

Любое объяснение экспертов или любая настройка кода будут по достоинству оценены.

Спасибо

2

Решение

В общем, для повышения производительности всегда нужно выбирать между памятью и временем. Результаты кэширования улучшат скорость, но потребуют больше памяти. Вы можете уменьшить использование памяти, вычисляя материал на лету за счет производительности.

В вашем случае сохранение дополнительных 1000+ значений в БД — это вопрос нескольких дополнительных килобайт. Расчет различий на лету окажет незначительное влияние на производительность. Любой из вариантов является абсолютным арахисом для любой БД и сервера.

Я бы продолжал делать вычисления на лету, так как это менее сложно и поддерживает нормализацию БД.

4

Другие решения

Первый метод самый быстрый, но, как уже упоминалось, подвержен ошибкам.

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

Затем, когда вы хотите узнать 50 лучших, вы можете использовать свой оригинальный метод поиска 50 лучших, используя ваш второй метод, где вы будете выбирать из таблицы, в которой хранятся различия.
Эти ссылки объясняют первичные ключи и как их использовать:

http://www.mysqltutorial.org/mysql-primary-key/

https://www.w3schools.com/sql/sql_primarykey.asp

-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector