首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在视图中使用索引

在视图中使用索引
EN

Stack Overflow用户
提问于 2018-06-11 17:30:49
回答 1查看 3.7K关注 0票数 2

我有这样的疑问:

代码语言:javascript
运行
复制
SELECT * 
  FROM view_name 
  WHERE column1 = something AND column2 = somethingelse

基础表在column1和column2上都有索引,但是MySQL使用了错误的索引。如何强制它使用正确的索引。就像这样:

代码语言:javascript
运行
复制
SELECT * 
  FROM view_name USE INDEX (table_name.column2) 
  WHERE column1 = something AND column2 = somethingelse

编辑:有人要求这样做:

代码语言:javascript
运行
复制
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

编辑:更详细的解释:

如果我这么做:

代码语言:javascript
运行
复制
SELECT * FROM table1 WHERE col1 = x AND col2 = y

MySQL在col1上选择索引,而我的性能很差。

如果我这么做:

代码语言:javascript
运行
复制
SELECT * FROM table1 USE INDEX (col2) WHERE col1 = x AND col2 = y

MySQL在col2上使用索引,我获得了很好的性能。

我怎么做同样的事,但在风景上?就像这样:

代码语言:javascript
运行
复制
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

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

EN

回答 1

Stack Overflow用户

发布于 2018-06-11 17:33:56

基础表具有column1和column2的索引.

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

代码语言:javascript
运行
复制
create index ix1 on table_name (column1, column2);

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50803203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档