Смотрите мой ответ на следующий вопрос https://stackoverflow.com/a/45611294/2350861
Как упоминалось в комментариях к вашему вопросу, не очень хорошая идея иметь таблицу с таким количеством столбцов. Лучший способ справиться с этой необходимостью для фильтрации атрибутов - это иметь отдельную таблицу значений с реляционным отображением «многие к одному». Затем вы можете отфильтровать нужные значения следующим образом:
SELECT * FROM table a where conditional = X
AND a.PrimaryId IN
(SELECT P_Id FROM values WHERE ValueType = "value1" AND ValueValue = "x" AND P_Id = a.PrimaryId)
AND a.PrimaryId IN
(SELECT P_Id FROM values WHERE ValueType = "value2" AND ValueValue = "y" AND P_Id = a.PrimaryId)
.... ;
Вы также можете использовать ВНУТРЕННИЕ СОЕДИНЕНИЯ вместо
SELECT * from table a where conditional = X
INNER JOIN values b
INNER JOIN values c
WHERE a.P_Id = b.P_Id AND a.P_Id = c.P_Id ...
AND b.ValueType = "value1" AND b.ValueValue = "x"
AND c.ValueType = "value2" AND c.ValueValue = "y"
... ;
Хотя это лучше, чем таблица с сотнями столбцов, она все равно может стать довольно уродливой по мере увеличения числа «значений». Я хотел бы рассмотреть возможность использования внешнего поискового движка или индексатора свободного текста / атрибутов.