동일한 WHERE 절이있는 동일한 테이블에 대한 두 개의 다른 쿼리

요시

두 가지 다른 쿼리가 있습니다. 그러나 둘 다 같은 테이블에 있고 같은 WHERE절을 가지고 있습니다. 그래서 그들은 같은 행을 선택하고 있습니다.

쿼리 1 :

SELECT HOUR(timestamp), COUNT(*) as hits 
FROM hits_table 
WHERE timestamp >= CURDATE() 
GROUP BY HOUR(timestamp)

쿼리 2 :

SELECT country, COUNT(*) as hits 
FROM hits_table 
WHERE timestamp >= CURDATE()
GROUP BY country

이를 더 효율적으로 만들 수있는 방법은 무엇입니까?

O. 존스

이 테이블이 올바르게 인덱싱되면 오늘의 행만보고 있기 때문에 전체 테이블이 얼마나 큰지는 솔직히 중요하지 않습니다.

테이블이 잘못 인덱싱되면 어떤 작업을하든 이러한 쿼리의 성능이 저하됩니다.

귀하의 WHERE timestamp >= CURDATE()절은 당신이에 인덱스가 필요 의미 timestamp열을. 귀하의 쿼리 중 하나에서 GROUP BY country색인을 포함하는 화합물 (timestamp, country)이 큰 도움이 될 것임을 보여줍니다 .

따라서 단일 복합 인덱스 (timestamp, country)는 질문의 두 쿼리를 모두 충족합니다.

어떻게 작동하는지 설명하겠습니다. 오늘의 레코드 (또는 실제로 특정 timestamp값으로 시작하고 끝나는 모든 레코드)를 찾고 국가별로 그룹화하고 개수를 계산하기 위해 MySQL은 다음 단계를 수행하여 쿼리를 충족 할 수 있습니다.

  1. 랜덤 액세스 일치하는 첫 번째 레코드의 인덱스 timestamp. O (log n).
  2. 인덱스에서 첫 번째 country 가져옵니다 .
  3. 인덱스 및 개수 의 다음 country으로 스캔합니다 . 의 위에).
  4. timestamp범위 가 끝날 때까지 3 단계를 반복 합니다.

이 인덱스 스캔 작업은 에이스 개발자 팀 (MySQL 팀)이 10 년 동안의 노력을 통해 얻을 수있는 속도만큼 빠릅니다. (토요일 오후에는이를 능가하지 못할 수도 있습니다.) MySQL은 인덱스의 작은 하위 집합으로 전체 쿼리를 충족하므로 그 뒤에있는 테이블의 크기는 중요하지 않습니다.

이러한 쿼리 중 하나를 차례로 실행하면 MySQL이 여전히 RAM 캐시에 일부 또는 모든 인덱스 데이터 블록을 가질 수 있으므로 디스크에서 다시 가져올 필요가 없습니다. 그것은 더 많은 도움이 될 것입니다.

예제 쿼리가 어떻게 연결되는지 보십니까 timestamp? 가장 중요한 WHERE기준은 타임 스탬프 범위를 선택합니다. 이것이 내가 제안한 복합 인덱스 timestamp가 첫 번째 열로있는 이유 입니다. country해당 열에 대한 간단한 인덱스로 이어지는 쿼리가 없으면 아마도 쓸모가 없습니다.

당신은 정말로 복합 커버링 인덱스가 필요한지 물었습니다. 당신은 아마해야 읽기 에 대해 어떻게 그들이 작동하고 자신을 위해 결정을합니다.

인덱스 선택에는 분명히 절충안이 있습니다. 각 인덱스의 처리 속도가 느려 INSERTUPDATE조금, 그리고 많은 쿼리 속도를 높일 수 있습니다. 특정 응용 프로그램에 대한 장단점을 정렬 할 수있는 사람은 당신뿐입니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

동일한 테이블이지만 다른 WHERE 절에서 두 개의 SELECT 쿼리 결합

분류에서Dev

동일한 WHERE 절을 가진 두 개의 다른 테이블에서 SELECT?

분류에서Dev

다른 테이블의 동일한 쿼리에서 두 열 합계

분류에서Dev

개수 및 그룹 기준이있는 동일한 테이블에 대한 2 개의 다른 쿼리

분류에서Dev

동일한 테이블에서 두 개의 쿼리 중단

분류에서Dev

동일한 데이터를 가진 두 테이블에 대해 실행되는 쿼리의 다른 성능

분류에서Dev

Neo4j-두 개의 다른 그래프에 대한 쿼리 (다른 DB의 테이블에 대한 SQl 조인과 동일)

분류에서Dev

MySQL은 동일한 열에 두 개의 WHERE-X-IN-Y 절이있는 쿼리를 최적화합니까?

분류에서Dev

다른 월 및 합계 값에 대해 동일한 테이블의 두 쿼리를 결합합니다.

분류에서Dev

동일한 굴절에 대해 최소한 두 개의 다른 결과를 갖는 Postgresql 쿼리

분류에서Dev

동일한 쿼리에서 다른 테이블의 행 계산

분류에서Dev

동일한 쿼리에서 다른 테이블의 행 계산

분류에서Dev

동일한 테이블에 두 개의 조인이있는 Contiditional WHERE

분류에서Dev

동일한 테이블에 대한 쿼리 내의 MySQL 쿼리

분류에서Dev

두 개의 다른 테이블에서 두 개의 다른 열에 대한 쿼리 업데이트 -MySQL

분류에서Dev

동일한 쿼리의 두 테이블에서 MySQL 선택

분류에서Dev

동일한 테이블을 참조하는 두 개의 외래 키에 대한 mysql 쿼리

분류에서Dev

다른 조건에서 동일한 테이블의 두 열 값을 나누는 방법 SQL 쿼리

분류에서Dev

where 절의 값이 다른 동일한 쿼리에 대해 다른 실행 시간

분류에서Dev

MySQL은 동일한 테이블에서 두 개의 쿼리를 조인

분류에서Dev

동일한 테이블에서 생성 된 두 개의 하위 쿼리 결합

분류에서Dev

어떻게 신장과 체중에 대한 동일한 테이블 열에서 두 개의 쿼리 결과를 얻을 수 있습니다

분류에서Dev

MYSQL-UPDATE 문의 WHERE 절에서 동일한 테이블에 대한 하위 쿼리

분류에서Dev

동일한 테이블에있는 두 쿼리의 MySQL One 결과

분류에서Dev

mysql은 동일한 테이블에서 두 개의 쿼리를 병합합니다.

분류에서Dev

쿼리와 동일한 WHERE 절이있는 하위 쿼리

분류에서Dev

PostgreSQL에서 조건이 다른 동일한 테이블에 두 개 이상의 서로 다른 SELECT 쿼리 결합

분류에서Dev

단일 MySQL 쿼리를 사용하여 동일한 테이블 내의 다른 열에있는 두 날짜 필드의 차이를 설정해야합니다.

분류에서Dev

SQL 쿼리 동일한 테이블을 사용하여 두 WHERE 절 비교

Related 관련 기사

  1. 1

    동일한 테이블이지만 다른 WHERE 절에서 두 개의 SELECT 쿼리 결합

  2. 2

    동일한 WHERE 절을 가진 두 개의 다른 테이블에서 SELECT?

  3. 3

    다른 테이블의 동일한 쿼리에서 두 열 합계

  4. 4

    개수 및 그룹 기준이있는 동일한 테이블에 대한 2 개의 다른 쿼리

  5. 5

    동일한 테이블에서 두 개의 쿼리 중단

  6. 6

    동일한 데이터를 가진 두 테이블에 대해 실행되는 쿼리의 다른 성능

  7. 7

    Neo4j-두 개의 다른 그래프에 대한 쿼리 (다른 DB의 테이블에 대한 SQl 조인과 동일)

  8. 8

    MySQL은 동일한 열에 두 개의 WHERE-X-IN-Y 절이있는 쿼리를 최적화합니까?

  9. 9

    다른 월 및 합계 값에 대해 동일한 테이블의 두 쿼리를 결합합니다.

  10. 10

    동일한 굴절에 대해 최소한 두 개의 다른 결과를 갖는 Postgresql 쿼리

  11. 11

    동일한 쿼리에서 다른 테이블의 행 계산

  12. 12

    동일한 쿼리에서 다른 테이블의 행 계산

  13. 13

    동일한 테이블에 두 개의 조인이있는 Contiditional WHERE

  14. 14

    동일한 테이블에 대한 쿼리 내의 MySQL 쿼리

  15. 15

    두 개의 다른 테이블에서 두 개의 다른 열에 대한 쿼리 업데이트 -MySQL

  16. 16

    동일한 쿼리의 두 테이블에서 MySQL 선택

  17. 17

    동일한 테이블을 참조하는 두 개의 외래 키에 대한 mysql 쿼리

  18. 18

    다른 조건에서 동일한 테이블의 두 열 값을 나누는 방법 SQL 쿼리

  19. 19

    where 절의 값이 다른 동일한 쿼리에 대해 다른 실행 시간

  20. 20

    MySQL은 동일한 테이블에서 두 개의 쿼리를 조인

  21. 21

    동일한 테이블에서 생성 된 두 개의 하위 쿼리 결합

  22. 22

    어떻게 신장과 체중에 대한 동일한 테이블 열에서 두 개의 쿼리 결과를 얻을 수 있습니다

  23. 23

    MYSQL-UPDATE 문의 WHERE 절에서 동일한 테이블에 대한 하위 쿼리

  24. 24

    동일한 테이블에있는 두 쿼리의 MySQL One 결과

  25. 25

    mysql은 동일한 테이블에서 두 개의 쿼리를 병합합니다.

  26. 26

    쿼리와 동일한 WHERE 절이있는 하위 쿼리

  27. 27

    PostgreSQL에서 조건이 다른 동일한 테이블에 두 개 이상의 서로 다른 SELECT 쿼리 결합

  28. 28

    단일 MySQL 쿼리를 사용하여 동일한 테이블 내의 다른 열에있는 두 날짜 필드의 차이를 설정해야합니다.

  29. 29

    SQL 쿼리 동일한 테이블을 사용하여 두 WHERE 절 비교

뜨겁다태그

보관