ORDERBY减慢mysql查询速度

ORDERBY减慢mysql查询速度,mysql,Mysql,我们有一个问题会减慢整个过程 此查询大约需要10秒钟 如果没有订单,只需76毫秒 我知道第二个只取前10行并完成,第一个必须先对整个数据集进行排序,然后再选择10行 现在的问题是:有没有可能让这个查询更快?如果是,怎么做 因为成员是动态计数的,所以我们不能像其他解决方案中建议的那样添加索引来加速查询 解释慢查询的原因 不一定是答案,但是评论太长了 这个查询告诉我们匹配名称模式的10个最不受欢迎的活跃组织,对吗 换句话说,它的功能与: SELECT o.* , COUNT(*) memb

我们有一个问题会减慢整个过程

此查询大约需要10秒钟

如果没有订单,只需76毫秒

我知道第二个只取前10行并完成,第一个必须先对整个数据集进行排序,然后再选择10行

现在的问题是:有没有可能让这个查询更快?如果是,怎么做

因为成员是动态计数的,所以我们不能像其他解决方案中建议的那样添加索引来加速查询

解释慢查询的原因


不一定是答案,但是评论太长了

这个查询告诉我们匹配名称模式的10个最不受欢迎的活跃组织,对吗

换句话说,它的功能与:

SELECT o.*
     , COUNT(*) members
  FROM tbl_organisation o
  JOIN tbl_user_organisation uo
    ON uo.organisation_id = o.id
 WHERE o.archived = 0
   AND o.name LIKE "%name%" -- this is the slow bit in this query
 GROUP
    BY o.id 
 ORDER
    BY members ASC 
 LIMIT 10

抱歉首先更新了itHello@Mazz,请将解释前缀添加到查询并运行它。MySQL会给你一个报告,告诉你什么是查询中的慢。对于每件事,你都可以搜索并阅读如何修复它。可能是缺少索引或其他什么。干杯这个查询告诉我们,根据会员资格排名的名称模式匹配的前10个活跃组织,对吗?@DamianDziaduch补充道EXPLAIN@Strawberry正当执行此查询的成员最少的前10个活动组织显示了该组织中错误的成员数量,并且只有一个结果。@Mazz Doh!编辑。谢谢,这正是我需要的,速度快了100倍。如果您可以搜索可以使用索引的名称%patterns,而不是不能使用索引的名称%patterns,YIt会更快。@mazz请发布解释当前查询的结果,这样我们就可以看到索引是如何使用的,而不是像键入all所示的全表扫描。
SELECT tbl_organisation.*,  
(
    SELECT count(*)
    FROM tbl_user_organisation 
    WHERE tbl_user_organisation.organisation_id = tbl_organisation.id
) as members 
FROM tbl_organisation
WHERE tbl_organisation.archived = 0 
AND tbl_organisation.name LIKE "%name%"  
LIMIT 10 OFFSET 0;
SELECT o.*
     , COUNT(*) members
  FROM tbl_organisation o
  JOIN tbl_user_organisation uo
    ON uo.organisation_id = o.id
 WHERE o.archived = 0
   AND o.name LIKE "%name%" -- this is the slow bit in this query
 GROUP
    BY o.id 
 ORDER
    BY members ASC 
 LIMIT 10