Если вы создадите индекс на
table(col1, col2), и ты делаешь
WHERE col1 = 'something' AND col2 = 'something'вы будете использовать индекс; это будет очень избирательно. То же самое с
WHERE col1 = 'something'
Но
WHERE col1 IS NOT NULL
вам придется протестировать. WHERE col1 IS NULL
будет сканировать таблицу, поскольку в этой ситуации индекс вовсе не является избирательным. Обновление индекса с помощью INSERT или UPDATE требует небольших накладных расходов. Это не может быть УНИКАЛЬНЫЙ индекс, поэтому рабочая нагрузка немного меньше. Но в большинстве случаев об этом не стоит беспокоиться, если только ваша рабочая нагрузка INSERT/UPDATE не намного тяжелее рабочей нагрузки SELECT. Если вы можете сделать столбцы
COLLATE latin1_binвы получите максимально легкие индексы. Но никаких смайлов, китайских иероглифов или нечувствительности к регистру.