У меня такой запрос:
SELECT *
FROM view_name
WHERE column1 = something AND column2 = somethingelse
В базовой таблице есть индексы как для column1, так и для column2, но MySQL использует неверный индекс.Как заставить его использовать правильный индекс.Примерно так:
SELECT *
FROM view_name USE INDEX (table_name.column2)
WHERE column1 = something AND column2 = somethingelse
Редактировать: Кто-то просил об этом:
SHOW CREATE VIEW view1
CREATE ALGORITHM=UNDEFINED DEFINER=`x`@`localhost` SQL SECURITY DEFINER VIEW `view1` AS select `table1`.`id` AS `identifier`,`table1`.`col1` AS `column1`,`table1`.`col2` AS `column2` from `table1`
SHOW CREATE TABLE table1
CREATE TABLE `table1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`col1` varchar(100) NOT NULL,
`col2` varchar(100) NOT NULL,
`col3` varchar(100) NOT NULL,
`col4` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
KEY `col1` (`col1`),
KEY `col2` (`col2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Редактировать: Более подробное объяснение:
Если я сделаю это:
SELECT * FROM table1 WHERE col1 = x AND col2 = y
MySQL выбирает индекс для col1, и я получаю низкую производительность.
Если я делаю это:
SELECT * FROM table1 USE INDEX (col2) WHERE col1 = x AND col2 = y
MySQL использует индекс для col2, и я получаю отличную производительность.
Как мне сделать то же самое, но на виде?Примерно так:
SELECT * FROM view1 USE INDEX (column2) WHERE column1 = x AND column2 = y
Как мне сказать MySQL, какой индекс использовать при выполнении запроса к представлению?
Редактировать: Я только что нашел это:
Представления не имеют индексов, поэтому подсказки к индексам не применяются.Использование индексных подсказок при выборе из вида не допускается.
https://dev.mysql.com/doc/refman/5.7/en/view-restrictions.html
Так что, возможно, то, что я хочу, не возможно.