mysql子查询是否总是使用临时表?这是无法索引的

mysql子查询是否总是使用临时表?这是无法索引的,mysql,select,Mysql,Select,我只是想确定我对这一点的理解是正确的。如果我有庞大的数据集和数据库的结构,我必须这样做 选择。。。从选择。。。作为tmp 这是否意味着查询总是很慢,并且没有办法通过添加一些索引等来解决这一问题?绝对不是。。。它基于索引和优化技术。根据最有可能查询数据的最小粒度构建查询并帮助索引。实例如果您有订单表,则可以根据订单日期或客户进行查询。但是,如果您希望在某个日期范围内按客户查询订单,那么更好的索引是按customerID,orderDate,而不是orderDate,customer 第一个索引将直

我只是想确定我对这一点的理解是正确的。如果我有庞大的数据集和数据库的结构,我必须这样做

选择。。。从选择。。。作为tmp


这是否意味着查询总是很慢,并且没有办法通过添加一些索引等来解决这一问题?

绝对不是。。。它基于索引和优化技术。根据最有可能查询数据的最小粒度构建查询并帮助索引。实例如果您有订单表,则可以根据订单日期或客户进行查询。但是,如果您希望在某个日期范围内按客户查询订单,那么更好的索引是按customerID,orderDate,而不是orderDate,customer

第一个索引将直接跳转到您正在查找的最接近日期范围的客户,并转到该日期范围的末尾,然后完成


第二个索引必须遍历您范围内的每个日期,其中会有许多客户需要跳过,然后获取一个客户的记录,然后转到下一个日期并重新进行操作。

您需要阅读一些有关索引的文献,因为它有助于了解您的结构是如何工作的,索引的存储方式及其位置和引用值。在MySQL中,基本上有三种结构类型:B-Tree、Hash、R-Tree。每个不同的引擎MyISAM、InnoDB、NDB都有各自的索引性能差异,例如NDB引擎有B树索引,但实际上它的工作方式类似于T树。数据类型也非常重要。如果使用不同类型的索引,则该索引将不起作用,或者会降低某些查询性能。所以,谈论加入时,他们的表现是基于我之前说过的早期阶段的决策。

似乎根本没有解决这个问题?在SQL Server中,当从派生表或视图中进行选择时,Optimizer会展开派生表定义,并可以向下推谓词并使用索引。据我所知,OP所问的问题是,在MySQL中,它是否总是被具体化到一个非索引的临时表中。@MartinSmith,实际上是这样。。per…这是否意味着查询总是很慢…我可能更感兴趣的是标题问题mysql子查询是否总是使用临时表?这是无法索引的。假设一个表foo在col1、col2上具有复合索引,MySQL如何将SELECT*FROM SELECT col1、col2 FROM foo(其中col1=2)计算为tmp,其中col2=3?