group_concat이있는 하위 쿼리가 포함 된 쿼리를 주문하는 것은 매우 느립니다.

사이먼 조셉 콕

이것은 내 질문입니다.

SELECT 
  content.*, 
  mpt.asiakas.*, 
  (
    SELECT GROUP_CONCAT(t20.asryhma) FROM context t20 
    WHERE t20.asryhma <> 0 AND t20.asiakas = content.content_id) 
  AS asryhma 
FROM content JOIN mpt.asiakas ON content.resource_id = mpt.asiakas.as_id  
WHERE content.content_type_id = 27 
ORDER BY mpt.asiakas.as_k2 DESC, mpt.asiakas.as_os DESC, mpt.asiakas.as_vat ASC LIMIT 0,10

content소유자 정보, 타임 스탬프 및 기타 많은 테이블에 대한 일반적인 정보를 포함하는 콘텐츠 테이블 (~ 2 만 행)입니다. mpt.asiakas실제 콘텐츠 데이터가있는 곳 (~ 14k 행)이므로이 두 데이터가 먼저 결합됩니다. 이 디자인은 중복성을 줄여야합니다. context더 나은 용어가 부족한 경우-조인 할당 테이블 (~ 3k 행)입니다. 패치 베이처럼 작동합니다.

이제 정렬 부분이나 하위 쿼리를 주석 처리하면 쿼리를 실행하는 데 약 0.01 초가 걸립니다. 그러나 둘 다 있으면 쿼리를 실행하는 데 약 17 초가 걸리며 이는 너무 많은 것입니다. 이것에 대해 무엇을 할 수 있는지 궁금합니다.

악어

GROUP_CONCAT가 수행되는 행을 제한하려면이 쿼리를 다음과 같이 다시 작성하십시오.

SELECT t.*,
       (
           SELECT GROUP_CONCAT(t20.asryhma) FROM context t20 
           WHERE t20.asryhma <> 0 AND t20.asiakas = t.content_id
       ) AS asryhma 
FROM (
    SELECT 
      content.*, 
      mpt.asiakas.*
    FROM content 
    JOIN mpt.asiakas ON content.resource_id = mpt.asiakas.as_id  
    WHERE content.content_type_id = 27 
    ORDER BY mpt.asiakas.as_k2 DESC, 
             mpt.asiakas.as_os DESC, 
             mpt.asiakas.as_vat ASC 
    LIMIT 0,10
) AS t

현재 MySql 최적화 프로그램 (버전 5.7 이하)은 ASC / DESC 순서가 혼합 된 쿼리를 최적화 할 수 없기 때문에 인덱스를 사용하여 ORDER BY 절을 최적화 할 수 없습니다.

자세한 내용은 다음 링크를 참조하십시오.
http://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html

경우에 따라 MySQL은 인덱스를 사용하여 ORDER BY를 확인할 수 없지만 여전히 인덱스를 사용하여 WHERE 절과 일치하는 행을 찾습니다.
이러한 경우에는 다음이 포함됩니다.
.....
.....-
ASC와 DESC를 혼합합니다.

SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

IN을 포함하는 UPDATE 쿼리와 하위 쿼리가 매우 느립니다.

분류에서Dev

쿼리 문자열에 특정 매개 변수가 포함 된 경우 Razor보기에 링크를 표시하는 방법은 무엇입니까?

분류에서Dev

여러 하위 쿼리가 포함 된 매우 느린 쿼리 SQL Server 2008 R2

분류에서Dev

BLOB 필드가 포함 된 DB 테이블에서 선택 쿼리가 매우 느립니다.

분류에서Dev

OR 절이있는 MySql JOIN 쿼리가 매우 느립니다.

분류에서Dev

하위 쿼리 없이는 다시 작성할 수없는 하위 쿼리가 포함 된 SQL 쿼리가 있습니까?

분류에서Dev

매핑 테이블이 포함 된 쿼리를 구성하고 있습니까?

분류에서Dev

PostgreSQL SQL 함수는 하드 코딩 된 쿼리보다 10 배 느립니다.

분류에서Dev

GROUP BY를 사용하는 MySQL의 매우 느린 하위 쿼리

분류에서Dev

Killer 무선이 포함 된 Dell은 Wi-Fi 속도가 매우 느립니다 (하지만 다른 장치는 그렇지 않습니다).

분류에서Dev

매우 이상 함-복합 인덱스를 추가하면 쿼리가 훨씬 느려집니다 (MongoDB).

분류에서Dev

Oracle의 중첩 된 하위 쿼리가 느립니다.

분류에서Dev

Group by 절을 사용하여 여러 하위 쿼리가 포함 된 저장 프로 시저를 최적화하는 방법은 무엇입니까?

분류에서Dev

LIMIT 함수를 사용하는 것은 하위 쿼리입니다.

분류에서Dev

동적 병렬 처리-많은 작은 커널을 시작하는 것이 매우 느립니다.

분류에서Dev

ActiveRecord에 포함 된 쿼리가 너무 많은 결과를 반환하는 위치

분류에서Dev

Sum, Join 및 Group By가 포함 된 Mysql 하위 쿼리

분류에서Dev

mysql 거리 쿼리를 Laravel Eloquent 쿼리로 변환하는 방법은 무엇입니까? -(위도, 경도 및 반경 매개 변수 포함)

분류에서Dev

무작위로 생성 된 데이터를 PostgreSQL에 삽입하는 속도가 매우 느립니다.

분류에서Dev

Electron을 사용하는 동안 MongoDb 연결 초기화 및 쿼리가 매우 느립니다.

분류에서Dev

MongoDB의 배열에 포함 된 단일 문서를 쿼리하는 방법은 무엇입니까?

분류에서Dev

포함 된 문서에서 집계 쿼리를 수행하는 방법은 무엇입니까?

분류에서Dev

특정 열이 SELECT 문에있을 때 쿼리가 매우 느립니다.

분류에서Dev

GORM을 사용한 쿼리가 포함 된 경우 Grails에서 문자열을 코드 조각으로 변환하는 방법은 무엇입니까?

분류에서Dev

색인으로 검색하는 경우에도 MongoDB 쿼리가 느립니다.

분류에서Dev

하위 쿼리에서 계산이 포함 된 SQL 쿼리

분류에서Dev

쿼리의 하위 집합을 반환하는 mysql은 쿼리의 상위 집합을 반환하는 것보다 느립니다.

분류에서Dev

하위 쿼리로 인해 쿼리가 매우 느림

분류에서Dev

스캔 필터에 파티션 키가 포함 된 경우 dynamo db 스캔이 파티션 만 쿼리하는 것이 현명합니까?

Related 관련 기사

  1. 1

    IN을 포함하는 UPDATE 쿼리와 하위 쿼리가 매우 느립니다.

  2. 2

    쿼리 문자열에 특정 매개 변수가 포함 된 경우 Razor보기에 링크를 표시하는 방법은 무엇입니까?

  3. 3

    여러 하위 쿼리가 포함 된 매우 느린 쿼리 SQL Server 2008 R2

  4. 4

    BLOB 필드가 포함 된 DB 테이블에서 선택 쿼리가 매우 느립니다.

  5. 5

    OR 절이있는 MySql JOIN 쿼리가 매우 느립니다.

  6. 6

    하위 쿼리 없이는 다시 작성할 수없는 하위 쿼리가 포함 된 SQL 쿼리가 있습니까?

  7. 7

    매핑 테이블이 포함 된 쿼리를 구성하고 있습니까?

  8. 8

    PostgreSQL SQL 함수는 하드 코딩 된 쿼리보다 10 배 느립니다.

  9. 9

    GROUP BY를 사용하는 MySQL의 매우 느린 하위 쿼리

  10. 10

    Killer 무선이 포함 된 Dell은 Wi-Fi 속도가 매우 느립니다 (하지만 다른 장치는 그렇지 않습니다).

  11. 11

    매우 이상 함-복합 인덱스를 추가하면 쿼리가 훨씬 느려집니다 (MongoDB).

  12. 12

    Oracle의 중첩 된 하위 쿼리가 느립니다.

  13. 13

    Group by 절을 사용하여 여러 하위 쿼리가 포함 된 저장 프로 시저를 최적화하는 방법은 무엇입니까?

  14. 14

    LIMIT 함수를 사용하는 것은 하위 쿼리입니다.

  15. 15

    동적 병렬 처리-많은 작은 커널을 시작하는 것이 매우 느립니다.

  16. 16

    ActiveRecord에 포함 된 쿼리가 너무 많은 결과를 반환하는 위치

  17. 17

    Sum, Join 및 Group By가 포함 된 Mysql 하위 쿼리

  18. 18

    mysql 거리 쿼리를 Laravel Eloquent 쿼리로 변환하는 방법은 무엇입니까? -(위도, 경도 및 반경 매개 변수 포함)

  19. 19

    무작위로 생성 된 데이터를 PostgreSQL에 삽입하는 속도가 매우 느립니다.

  20. 20

    Electron을 사용하는 동안 MongoDb 연결 초기화 및 쿼리가 매우 느립니다.

  21. 21

    MongoDB의 배열에 포함 된 단일 문서를 쿼리하는 방법은 무엇입니까?

  22. 22

    포함 된 문서에서 집계 쿼리를 수행하는 방법은 무엇입니까?

  23. 23

    특정 열이 SELECT 문에있을 때 쿼리가 매우 느립니다.

  24. 24

    GORM을 사용한 쿼리가 포함 된 경우 Grails에서 문자열을 코드 조각으로 변환하는 방법은 무엇입니까?

  25. 25

    색인으로 검색하는 경우에도 MongoDB 쿼리가 느립니다.

  26. 26

    하위 쿼리에서 계산이 포함 된 SQL 쿼리

  27. 27

    쿼리의 하위 집합을 반환하는 mysql은 쿼리의 상위 집합을 반환하는 것보다 느립니다.

  28. 28

    하위 쿼리로 인해 쿼리가 매우 느림

  29. 29

    스캔 필터에 파티션 키가 포함 된 경우 dynamo db 스캔이 파티션 만 쿼리하는 것이 현명합니까?

뜨겁다태그

보관