MySQL查询优化器现在可以将派生表优化应用于相关的标量子查询。这是通过应用额外的分组,然后对提升的谓词进行外部联接来完成的。例如,诸如的查询SELECT * FROM t1 WHERE (SELECT a FROM t2 WHERE t2.a=t1.a) > 0可以重写为SELECT t1.* FROM t1 LEFT OUTER JOIN (SELECT a, COUNT(*) AS ct FROM t2 GROUP BY a) AS derived ON t1.a = derived.a WHERE derived.a > 0。
如果子查询已经具有显式分组,则MySQL会将额外的分组添加到现有分组列表的末尾。
MySQL执行基数检查,以确保子查询返回的行不超过一行,ER_SUBQUERY_NO_1_ROW如果返回则进行查询 。在评估提升的谓词之前,检查是评估重写查询中的任何WHEREorJOIN子句的一部分 。
有关更多信息,请参见“ 相关子查询”以及“ 派生表”。
Filesort用于具有ORDER BY ... DESC子句的查询,即使降序列上的索引可用并已使用也是如此。之所以发生这种情况,是因为 ORDER BY即使匹配了相等谓词中的字段也没有删除子句,因此优化程序无法将查询与降序索引进行匹配,从而导致性能欠佳。(缺陷#101220,错误#32038406)
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。