나는 다음 쿼리 한 :그룹을 저장하고 값순으로 정렬하지 않고도이 쿼리를 빠르게 할 수 있습니까?
SELECT IF(dissolution_date IS NULL,
YEAR(CURDATE()) - YEAR(incorporation_date),
YEAR(dissolution_date) - YEAR(incorporation_date)) as length,
COUNT(DISTINCT(id_company)) as count
FROM company
WHERE incorporation_date IS NOT NULL
GROUP BY length
ORDER BY length ASC
을 나는 용해 날짜 (또는 대체)가 점을 감안하고, 설립 날짜는이 차이를 저장하는 테이블에 추가 열을 추가 중복 보인다 두 개의 날짜 (특히 회사가 해체되지 않은 경우, 해산 날짜는
일
년마다 업데이트해야합니다.
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
----|-------------|---------|------|--------------------|------|---------|------|----------------------------------------
1 | SIMPLE | company | ALL | incorporation_date | NULL | NULL | NULL | 9128995 | Using where; Using filesort
을 현재 쿼리가 아닌 계산 된 열 비슷한 쿼리 내가 여기 달성하고 싶은 무엇 인 (밀리 초)을하는 반면, 초 10 년대를 취 다음과 같이
Explain 스 출력됩니다.
파일롯을 사용하지 않고 길이 테이블을 원래 테이블에 추가하지 않고 길이별로 그룹화하고 정렬 할 수 있습니까? 아니면 길이 열을 추가해야합니까?이 경우
일
년마다 해산 _ 날짜를 업데이트하는 가장 좋은 방법은 무엇입니까?
죄송합니다. 오타되었습니다. – Jon
'IF (...)'를 'YEAR (COALESCE (해산 날짜, CURDATE())) - YEAR (incorporation_date) AS 길이'로 바꾸는 것은 어떨까요 –
헤드 업 : COALESCE에 감사드립니다. 차이점을 확인하십시오 : ( – Jon