Извините, что не согласен с Майком. Добавление индекса предназначено для ограничения количества полных поисков записей для MySQL, тем самым ограничивая количество операций ввода-вывода, которое обычно является узким местом.
Эта индексация не является бесплатной; вы платите за него при вставках / обновлениях, когда индекс должен обновляться, и за сам поиск, поскольку теперь ему нужно загрузить индексный файл (полнотекстовый индекс для 300M записей, вероятно, отсутствует в памяти). Так что вполне возможно, что вы получите дополнительные IO вместо того, чтобы ограничить его.
Я согласен с утверждением, что двоичная переменная лучше всего хранится как единица, bool или tinyint, так как это уменьшает длину строки и тем самым может ограничить дисковый ввод-вывод, а также сравнение чисел быстрее.
Если вам нужна скорость и вы редко используете отключенные записи, вы можете захотеть иметь 2 таблицы: одну для включенных и одну для отключенных записей и перемещать записи при изменении состояния. Поскольку это увеличивает сложность и риск, это будет мой последний выбор, конечно. Обязательно сделайте переход в 1 транзакцию, если вам довелось сделать это.
Мне просто пришло в голову, что вы можете проверить, действительно ли индекс используется с помощью оператора объяснение . Это должно показать вам, как MySQL оптимизирует запрос. Я действительно не знаю, как MySQL оптимизирует запросы, но из postgresql я знаю, что вы должны объяснить запрос к базе данных примерно такой же (по размеру и данным), что и настоящая база данных. Поэтому, если у вас есть копия в базе данных, создайте индекс для таблицы и посмотрите, действительно ли он используется. Как я уже сказал, я сомневаюсь в этом, но я совершенно точно не знаю всего:)