Быстрее запросить одно двоичное (1) поле или 8-битные поля? - PullRequest
4 голосов
/ 14 ноября 2011

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

Ответы [ 3 ]

4 голосов
/ 14 ноября 2011

Индексы в однобитовых полях будут в основном бесполезны.Бит имеет ужасную селективность, 0 или 1, и, вероятно, будет игнорироваться оптимизатором.8 индексов в 8-битных полях будут 8 индексами, игнорируемыми оптимизатором.

Индекс в байтовом столбце лишь немного более избирателен, с 256 различными значениями.Но если вы ищете отдельные битовые комбинации, такие как «бит 3 включен», то нет способа выразить это как отдельное значение для поиска или как диапазон., у вас все равно будет сканирование таблицы в любом случае .

Так что лучше объясните, в чем ваша проблема, а не решение, и, возможно, мы сможем придумать что-нибудь более эффективное.

3 голосов
/ 14 ноября 2011

Я бы пошел на индексируемый однобайтовый параметр или, по крайней мере, на вычисляемый 1-байтовый столбец с 8 значениями вместе, если у вас есть необходимость держать их отдельно для других средств.(возможно, лучшее из обоих миров)

Как один байт, кардинальность результатов сопоставления для поиска по всем 8 значениям с большей вероятностью позволит избежать переломных моментов, чем 8 отдельных индексов - даже если эти 8 индексов могуту меня есть движок, у меня есть подозрение, что кардинальность может сделать запрос и отсканировать запрос вместо того, чтобы искать - придется запускать тесты, чтобы доказать это.

0 голосов
/ 14 ноября 2011

Один байтовый запрос будет работать быстрее.Построение байта для сравнения в памяти будет намного быстрее.

...