У меня проблема с запросом MySQL, который слишком медленный, потому что, по моему скромному мнению, индексация не работает должным образом.
У меня есть таблица, которая содержит 7 полей indexables и 3 BLOB-объекта данных.
CREATE TABLE IF NOT EXISTS `superstrat` (
`idStrategy` int(11) NOT NULL AUTO_INCREMENT,
`strategy_date` datetime NOT NULL,
`strategy_type` int(11) NOT NULL,
`strategy_supertype` int(11) NOT NULL,
`strategy_codes` varchar(40) NOT NULL,
`strategy_vols` blob NOT NULL,
`strategy_prices` blob NOT NULL,
`strategy_hedge` blob NOT NULL,
`strategy_neutrality` int(11) NOT NULL,
`strategy_valuation_model` int(11) NOT NULL,
`strategy_source` int(11) NOT NULL,
PRIMARY KEY (`idStrategy`),
UNIQUE KEY `strategy_date` (`strategy_date`,`strategy_type`,`strategy_supertype`,`strategy_codes`,`strategy_neutrality`,`strategy_valuation_model`,`strategy_source`),
KEY `strategy_date_2` (`strategy_date`),
KEY `strategy_type` (`strategy_type`),
KEY `strategy_supertype` (`strategy_supertype`),
KEY `strategy_codes` (`strategy_codes`),
KEY `strategy_neutrality` (`strategy_neutrality`),
KEY `strategy_valuation_model` (`strategy_valuation_model`),
KEY `strategy_source` (`strategy_source`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=888605 ;
Я делаю этот запрос, но он слишком медленный
SELECT * FROM test_ter.superstrat WHERE strategy_date >= '2004-01-01' AND strategy_type='0'
AND strategy_supertype = '0' AND strategy_valuation_model='6'
AND strategy_source ='0' AND strategy_codes='10;' AND strategy_neutrality='2' LIMIT 0,5000;
Причина в том, что он выполняет запрос index_merge только по двум индексам: стратегии_типа, стратегии_коды:
1 SIMPLE superstrat index_merge strategy_date,strategy_date_2,strategy_type,strategy_supertype,strategy_codes,strategy_neutrality,strategy_valuation_model,strategy_source strategy_type,strategy_codes 4,42 6258 Using intersect(strategy_type,strategy_codes); Using where
Как я могу заставить index_merge на других полях, здесь он будет извлекать 6258 строк вместо 1,5 КБ, когда моя база данных заполнена, для извлечения 50000 строк потребуется 60 секунд, но я вполне уверен, что его можно уменьшить цель 1.5к, я просто не знаю как. ИНДЕКС ИСПОЛЬЗОВАНИЯ и ИНДЕКС СИЛЫ, похоже, не работают.