Побитовая маска против эффективности IN () в sqlite?

У меня есть два способа выбрать набор записей из базы данных:

  SELECT ... WHERE `level` IN (1,2,4,8) LIMIT ...;  

или

  SELECT ... WHERE `level` & mask LIMIT ...;

Всего 4 «уровня», пронумерованных 1,2,4, 8 (по причине возможности использовать ту же маску и в других местах). Обе фигурные скобки IN () или маска могут содержать любой набор из одного или нескольких из 4 уровней. Столбец проиндексирован. Запрос по-прежнему выполняется дольше, чем удобно, и мы пытаемся оптимизировать его для повышения скорости.

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

Можете ли вы сказать мне, какой подход будет быстрее?

10
задан SF. 4 March 2011 в 11:30
поделиться