>

전체 프로세스를 느리게하는 쿼리가 하나 있습니다.

이 쿼리는 10 seconds 에 대해

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%"  
ORDER BY members
LIMIT 10 OFFSET 0;

ORDER BY 없이  그것은 단지 76ms 걸립니다

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;

두 번째는 첫 10 행만 가져 와서 완료하고 첫 번째 행은 10 행을 선택하기 전에 전체 데이터 세트를 먼저 정렬해야한다는 것을 알고 있습니다.

지금 문제는 :이 쿼리를 더 빠르게 만들 수 있습니까? 그렇다면 어떻게됩니까?

와이즈 비즈 이후  동적으로 계산됩니다. members 를 추가 할 수 없습니다  다른 솔루션에서 제안한 것과 같이 쿼리 속도를 높이기 위해

INDEX  느린 쿼리

EXPLAIN

  • 답변 # 1

    답변 일 필요는 없지만 의견이 너무 깁니다 ...

    이 쿼리는 이름 패턴과 일치하는 가장 인기있는 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
    
    

  • 이전 reactjs에서 체크 박스 데이터를 보내는 방법
  • 다음 path - MBED_ARM_PATH가 환경 변수로 설정되었지만 존재하지 않습니다