Насколько дорого делать запрос, сравнивая два столбца с запросом по одному столбцу? - PullRequest
1 голос
/ 09 апреля 2020

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

-- get landscape orientation photos with one column
select * from photos where orientation = 'landscape';

Но, конечно, я мог бы просто сравнить два столбца следующим образом, сделав столбец ориентации ненужным:

-- get landscape orientation photos by comparing two columns
select * from photos where width > height;

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

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Способ узнать это - сравнить его с указанными вами c набором данных, базой данных (postgresql и mysql совершенно разные) и версией, а также аппаратным обеспечением.

В моих руках сравнение одного строкового столбца в строковую константу очень немного медленнее, чем сравнение двух плавающих столбцов.

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

1 голос
/ 09 апреля 2020

Вы могли бы даже сделать этот расчет автоматизированным c:

ALTER TABLE photo ADD COLUMN orientation enum('landscape', 'portrait') GENERATED ALWAYS AS (if(height>width, 'landscape', 'portrait')),
ADD INDEX o(orientation)

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

И квадратные фотографии?

скрипка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...