У меня очень большая (> 100 миллионов строк) таблица, и запрос, который мне нужно написать, должен проверить, является ли столбец типа TEXT
пустым.Мне плевать на фактический текст, только если значение столбца равно нулю или нет.
Я пытаюсь написать индекс, чтобы сделать этот запрос эффективным, и я хочу, чтобы запрос был удовлетворен толькоглядя на индекс, например, такой, что вывод объяснения *1005* этого запроса показывает Using index
вместо Using index condition
.
Конкретно, таблица, с которой я имею дело, имеет такую структуруэто:
CREATE TABLE foo (
id INT NOT NULL AUTO_INCREMENT,
overridden TEXT,
rowState VARCHAR(32) NOT NULL,
active TINYINT NOT NULL DEFAULT 0,
PRIMARY KEY (id),
) ENGINE=InnoDB
И запрос, который я хочу, это:
SELECT
IF(overridden IS NULL, "overridden", rowState) AS state,
COUNT(*)
FROM foo
WHERE active=1
GROUP BY state
Столбец overridden
- это описание того, почему столбец переопределен, но, как я уже упоминал выше, яменя не волнует его содержимое, я хочу использовать его только как логический флаг.
Я пытался создать индекс для (active, rowState, overridden(1))
, но вывод объяснения по-прежнему показывает Using index condition
.
Есть что-то лучшее, что я мог бы сделать?