У меня есть два способа выбрать набор записей из базы данных:
SELECT ... WHERE `level` IN (1,2,4,8) LIMIT ...;
или
SELECT ... WHERE `level` & mask LIMIT ...;
Всего 4 «уровня», пронумерованных 1,2,4, 8 (по причине возможности использовать ту же маску и в других местах). Обе фигурные скобки IN ()
или маска
могут содержать любой набор из одного или нескольких из 4 уровней. Столбец проиндексирован. Запрос по-прежнему выполняется дольше, чем удобно, и мы пытаемся оптимизировать его для повышения скорости.
Вчера один человек сказал, что решил, что использование наивного IN () приводит к четырем сравнениям, и что я должен использовать вместо него битовую маску. . Сегодня я слышал, что битовая маска полностью исключает преимущества индексации столбца и будет намного медленнее.
Можете ли вы сказать мне, какой подход будет быстрее?