Mysql: поиск по полю с выставленным битом (по битовой маске)

Допустим есть таблица, где есть много записей. И нужно поработать с фильтрами по битовому полю.

Вот таблица:

Выставляется бит так:

Убирается так:

Так вот.
Нужно сделать выборку только тех записей, у кого выставлен бит.

  1. В лоб. Не используется индекс по type.
  2. Магия. Используется индекс по type

    Но всё равно просмотрено много строк из таблицы. Значительно лучше так:
  3. Используется ещё и covering index

    Здесь самый «тяжёлый» запрос использует covering index.

Что можно почитать по теме:
http://stackoverflow.com/questions/1457218/bitwise-supersets-and-subsets-in-mysql
http://dev.mysql.com/doc/refman/5.0/en/bit-functions.html

LEAVE A COMMENT