Mysql 如何更好地优化此查询?
这是一个需要20分钟的问题 从年龄>5岁的公司中选择*按网络订单按网络描述限制分组02001Mysql 如何更好地优化此查询?,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
我有关于年龄和网络的索引。有没有办法更有效地运行此查询?可以选择使用服务器端语言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不会。分组依据的原因是存在重复项。