ситуация зависит от типа данных внутри таблицы, и того, какие у вас данные хранятся в фиксированном поле.
Если нет VARCHAR, то все строки имеют фиксированную длину на диске. Т.е. если у вас 1 строка фиксированной длины - 100 байт, то 1000ая строка на диске, имеет позицию 1000 * 100 (условно) Это обычно ускоряет считывание с диска. Как только есть хоть 1 varchar, строки больше не фиксированные - нет никакой оптимизации.
Другой случай - надо знать, что вы храните в данных? Например, если вы там всегда храните 3 значный код, который всегда ровно 3 знака, то CHAR лучше из за того что он требует на 1 байт меньше для хранения, даже если другие столбцы varchar. Внутри VARCHAR - есть дополнительный символ "конец данных", который увеличивает требуемое место на диске. Если же у вас данные не фиксированной длины, т.е. иногда 1, иногда 2, иногда 3 знака - то CHAR не имеет смысла в данном случае - особой экономии нет на диске.
Да, это всё имеет смысл только если у вас ОЧЕНЬ много данных. Для таблиц до 10000 строк особой разницы нет.
Итого:
* CHAR имеет смысл только если у вас строки фиксированной длины, и только если много строк в таблице.