полезен ли mysql-индекс для столбца 'state', когда он выполняет только битовые операции над столбцом? - PullRequest
0 голосов
/ 10 июня 2010

У меня много доменных сущностей (хранящихся в mysql), которые подвергаются множеству различных операций. Каждая операция выполняется из другой программы. Мне нужно сохранить (flow) -state для этих объектов, которые я реализовал как длинное поле «flowstate», используемое в качестве набора битов.

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

select * from entities where state >> 7 & 1 = 1

Показан бит 7 (соответствует операции 7). (<- упрощенно) </p>

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

Что я хотел бы знать: Помогает ли вообще индекс mysql для flowstate? В конце концов, это не единственное значение, которое Mysql может быстро найти, используя двоичную сортировку или что-то еще.

Если нет, могу ли я сделать что-нибудь еще, чтобы ускорить процесс? , Существуют ли специальные «индексы маски» для полей с вариантами использования, как указано выше?

ТИА, Герт-Январь

Ответы [ 2 ]

0 голосов
/ 11 июня 2010

Используйте EXPLAIN в операторе, чтобы увидеть, как он обращается к таблице. Стоит поставить индекс на поле и перезапустить EXPLAIN, чтобы увидеть, использует ли его MySQL Должна быть очевидная разница в производительности между результатами, если таблица довольно большая.

0 голосов
/ 11 июня 2010

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

... where state < ? and state > ? and ...

Если бы это было так, тогда был бы полезен индекс состояния.Это, вероятно, длинный выстрел, хотя.В противном случае вам лучше всего пересмотреть схему.

...