Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何更好地优化此查询?_Mysql_Sql_Query Optimization - Fatal编程技术网

Mysql 如何更好地优化此查询?

Mysql 如何更好地优化此查询?,mysql,sql,query-optimization,Mysql,Sql,Query Optimization,这是一个需要20分钟的问题 从年龄>5岁的公司中选择*按网络订单按网络描述限制分组02001 我有关于年龄和网络的索引。有没有办法更有效地运行此查询?可以选择使用服务器端语言php运行多个单独的查询。在年龄、网络、公司ID上创建一个复合索引,并测试其运行时间: SELECT network, min(companyid) FROM company WHERE Age > 5 GROUP BY network; 这应该使用索引,并且速度相当快 现在,请加入以获取其余信息: select c

这是一个需要20分钟的问题

从年龄>5岁的公司中选择*按网络订单按网络描述限制分组02001


我有关于年龄和网络的索引。有没有办法更有效地运行此查询?可以选择使用服务器端语言php运行多个单独的查询。

在年龄、网络、公司ID上创建一个复合索引,并测试其运行时间:

SELECT network, min(companyid)
FROM company
WHERE Age > 5
GROUP BY network;
这应该使用索引,并且速度相当快

现在,请加入以获取其余信息:

select c.*
from company c join
     (SELECT network, min(companyid) as mincompanyid
      FROM company
      WHERE Age > 5
      GROUP BY network
      ORDER BY network DESC
      LIMIT 0, 2001
     ) n
     ON c.companyid = n.mincompanyid;
这假设公司有一个名为companyid的主键和一个关于年龄、网络和companyid的复合索引

编辑:

如果第一个查询的速度不是很快,那么请估计获得2001个未重复名称所需的行数。然后做:

select c.*
from company c join
     (SELECT network, min(companyid) as mincompanyid
      FROM (SELECT c.*
            FROM company
            WHERE Age > 5
            ORDER BY network DESC
            LIMIT 10000
           ) c
      GROUP BY network
      ORDER BY network DESC
      LIMIT 0, 2001
     ) n
     ON c.companyid = n.mincompanyid;

在这种情况下,假设10000个足够大,可以得到2001个网络。此版本应能解决性能问题。

请指定按网络列分组数据的原因,好吗?为什么需要它?…是的,为什么在不使用任何分组操作的情况下按网络分组?像COUNT*etcHave一样,您是否尝试在查询中运行解释/解释扩展?EXPLAIN的输出可能会给出一些关于如何使用某些索引的提示。@PeterLillevold即使接受这样的查询也是mysql的一个缺陷。。。MsSQL不会。分组依据的原因是存在重复项。