Должен ли я использовать индексирование для этих типов атрибутов - PullRequest
1 голос
/ 22 апреля 2011

В одной определенной таблице у меня есть целочисленное поле 'IsDeleted', которое по умолчанию равно 0.
Это поле в основном помечает строку как начало удаленного или нет.Теперь при запросе я бы указывал на выборку записей в зависимости от того, был ли установлен этот флаг.

Стоит ли устанавливать индекс для этого атрибута?

Ответы [ 2 ]

0 голосов
/ 22 апреля 2011

Если вы работаете с MySQL, вы должны использовать тип данных BIT для этого типа операций, связанных с булевой проверкой, а не с целым числом. (см. http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html).

True и False соответствуют 1 и 0 соответственно.

Для тех запросов, где вы указываете, что значение равно 1, индекс для столбца может быть достоин, для 0, нет. Подробности здесь

0 голосов
/ 22 апреля 2011

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

Скажем, если 1% записей будет удалено ивы запрашиваете

SELECT  *
FROM    records
WHERE   isDeleted = 1

, оптимизатор выберет индекс, а для этого запроса:

SELECT  *
FROM    records
WHERE   isDeleted = 0

будет использоваться полное сканирование таблицы.

Есликоличество ни удаленных, ни сохраненных записей ниже критической точки (которая зависит от размера записи и других вещей, но, как правило, можно считать 10%), тогда индекс, вероятно, никогда не будет использоваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...