Разделение инфоблоков на партиции
Возможный путь увеличения скорости - разделение таблицы инфоблоков на партиции:
ALTER TABLE `b_iblock_element` DROP PRIMARY KEY, ADD CONSTRAINT id_iblock_id PRIMARY KEY (ID,IBLOCK_ID) PARTITION BY RANGE COLUMNS(IBLOCK_ID) ( PARTITION p0 VALUES LESS THAN (45), PARTITION p1 VALUES LESS THAN (46), PARTITION p2 VALUES LESS THAN (52), PARTITION p3 VALUES LESS THAN MAXVALUE ); --5 сек EXPLAIN PARTITIONS SELECT * FROM b_iblock_element WHERE IBLOCK_ID = 45;
Корзина:
ALTER TABLE `b_sale_basket` DROP PRIMARY KEY, ADD CONSTRAINT idx_user_id PRIMARY KEY (ID,FUSER_ID) PARTITION BY KEY(FUSER_ID) PARTITIONS 10; -- 1 млн, 1 мин