我有这样的疑问:
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
所以也许我想要的是不可能的。
发布于 2018-06-11 17:33:56
基础表具有column1和column2的索引.
您这是什么意思?为了快速查询,您不需要在每个列上只使用两个单独的索引,而是需要一个组合索引。尝试添加以下索引:
create index ix1 on table_name (column1, column2);
没有这个,MySQL可以尝试使用任何较不优化的索引。
https://stackoverflow.com/questions/50803203
复制相似问题