gpt4 book ai didi

mysql - 在 View 中使用索引

转载 作者:行者123 更新时间:2023-11-29 17:28:55 24 4
gpt4 key购买 nike

我有一个这样的查询:

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 上使用索引,我获得了很好的性能。

如何在 View 上做同样的事情?像这样的事情:

SELECT * FROM view1 USE INDEX (column2) WHERE column1 = x AND column2 = y

在 View 上运行查询时如何告诉 MySQL 使用什么索引?

编辑:我刚刚发现这个:

Views do not have indexes, so index hints do not apply. Use of index hints when selecting from a view is not permitted.

https://dev.mysql.com/doc/refman/5.7/en/view-restrictions.html

所以,也许我想要的东西是不可能的。

最佳答案

The underlying table has indexes on both column1 and column2...

你这是什么意思?为了使该查询速度更快,您不需要在每列上只使用两个单独的索引,而是需要一个组合索引。尝试添加以下索引:

create index ix1 on table_name (column1, column2);

如果没有这个,MySQL 可以尝试使用任何不太优化的索引。

关于mysql - 在 View 中使用索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50803203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com