Нужно отрефакторить схему, привести всё в божеский вид к 5-6 нормальной форме.
80% всех проектов с которыми приходилось иметь дело "аля магазин на РНР" индексирует varchar и еже с ним. Из-за этого "выборка 2К товаров" - просто непосильная задача. Стоит почитать книжку SQL Antipatterns и High Performance MySQL. Разобраться как работает InnoDB, и как вообще
происходит оптимизация.
Пример "говно-схемы"
Table products
id unsigned int autoincrement (PK)
name varchar(255) NOT NULL
group varchar(255) NOT NULL
oneAttr varchar(255)
otherAttr varchar(255)
anotherAttr varchar(255)
description varchar(255)
dateCreated DATETIME
Нужно разбить минимум на 4 таблички
Table products
id unsigned int autoincrement (PK)
name varchar(255) NOT NULL
group_id unsigned int NOT NULL (FK)
description varchar(255)
dateCreated DATETIME
Table product_groups
id unsigned int autoincrement (PK)
name varchar(255) NOT NULL
Table products_attrs
id unsigned int autoincrement (PK)
name varchar(255) NOT NULL
Table product_attrs_values
product_id unsigned int (PK <- FK)
attr_id unsigned int (PK <- FK)
attr_value varchar(255) NOT NULL
Ну и т.п.
Это второй курс универа :)
И очень много обывателей даже до него не дотягивает, что меня довольно таки печалит.
И, конечно-же, нужно уметь использовать
EXPLAIN.