1
어떻게 mysql에서 타임 스탬프 열의 날짜 부분을 기준으로 그룹화하고 여전히 그 인덱스를 활용할 수 있습니까? 당신은 그러나이 쿼리 thetime에 인덱스를 사용할 수 없습니다타임 스탬프의 날짜순 그룹
select date(thetime) from mytable group by date(thetime)
같은 솔루션을 사용할 수 있지만 당신이에 의해 그룹화하기 전에 기능을 사용하여 열을 변환하는로 대신 임시 테이블이 필요합니다 물론
그것.
+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+----------------------------------------------+
| 1 | SIMPLE | mytable | index | NULL | thetime | 4 | NULL | 48183 | Using index; Using temporary; Using filesort |
+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+----------------------------------------------+
이론적으로 열의 인덱스에서 범위 스캔을 사용할 수없고 임시 테이블이 필요하지 않은 이유가 없습니다. 쿼리를 실행하도록 쿼리 최적화 프로그램을 설득 할 수있는 구문이 있습니까?
함수를 사용하여 변경하지 않으면 인덱스 된 열에서 group by을 수행하기 위해 항상 임시 테이블이 필요하지는 않습니다. 작동하는 시간 부분을 잘라내는 함수 대신 연산자가 있다면 –
@x : 음, 우리 둘 다 맞다고 생각합니다. 집계 함수가 적용되지 않는 한 별개의 값 목록은 비교를 위해 이전에 출력 된 값만 유지하면서 인덱스를 걷는 (이론적으로) 값을 얻을 수 있습니다. 카운트/합계를 수행 할 때 모든 값은 그룹화 작업이 끝날 때까지 유지되어야합니다. 질문은 : 이것은 데이터베이스에 구현되어 있습니까? :) – Ronnis