Tenho uma estrutura de tabela da seguinte forma:
CREATE TABLE `sale_product_inventories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sale_id` int(11) NOT NULL,
`product_id` int(11) NOT NULL,
`size` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`tier_number` int(11) NOT NULL DEFAULT '1',
`sale_product_pool_id` int(11) DEFAULT NULL,
`inventory` int(11) NOT NULL,
`in_cart_units` int(11) DEFAULT '0',
`size_display_order` tinyint(4) NOT NULL DEFAULT '0',
`last_updated_by` int(11) DEFAULT '0',
`created_by` int(11) DEFAULT '0',
`status` enum('active','inactive') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'active',
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQUE` (`sale_id`,`product_id`,`tier_number`,`size`,`sale_product_pool_id`)
) ENGINE=InnoDB AUTO_INCREMENT=92872 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
OBS: Tenho um Index UNIQUE = sale_id
, product_id
, tier_number
, size
,sale_product_pool_id
Quando eu executo esta consulta:
select * from sale_product_inventories
where
sale_id in (502,504) and
(sale_id, product_id) in ((502,2),(502,1), (502,3),(502,4) ,(504,2) ,(504,3) )
MySql usa o índice Unique e o tempo de execução é de 0,7 milissegundos
MAS
quando executo esta consulta
select * from sale_product_inventories
where
(sale_id, product_id) in ((502,2),(502,1), (502,3),(502,4) ,(504,2) ,(504,3) )
O MySql não usa o índice UNIQUE e o tempo de execução é de 76 milissegundos.
Mysql: 5.5.27 Versão InnoDB: 1.1.8
Minha pergunta é por que o mysql está se comportando dessa maneira. Alguém por favor pode me ajudar com isso.
EDIT:
me deparei com isso, então pensei que poderia ser útil adicionar MySQL geralmente não pode usar índices em colunas, a menos que as colunas sejam isoladas na consulta. “Isolar” a coluna significa que ela não deve fazer parte de uma expressão ou estar dentro de uma função na consulta.