반응형
MySQL에서 여러 열의 MAX() 선택
저는 현재 (PHP와 MySQL을 사용하여) 방대한 쿼리를 가지고 있으며 18-25초의 방대한 부하를 줄이기 위해 최적화하는 방법을 잘 모르겠습니다.이전 답변을 살펴보니 모두 비슷한 양의 코드를 작성하여 스크립트 실행 시간이 비슷하다는 것을 알 수 있었습니다. 따라서 이미 제시된 것과 달리 다른 아이디어를 가진 사람이 있는지 알고 싶습니다.
TLDR: 각 분석 ID에 대한 최대 열을 선택해야 하며 이는 엄청난 부하를 유발하므로 어떻게든 줄여야 합니다.
$qry = "SELECT DISTINCT ip,country_code,country,
(SELECT MAX(region) FROM analytics RegOne WHERE bid='$id' AND RegOne.ip= IPOne.ip) AS region,
(SELECT MAX(city) FROM analytics CitOne WHERE bid='$id' AND CitOne.ip= IPOne.ip) AS city,
(SELECT MAX(os) FROM analytics OSOne WHERE bid='$id' AND OSOne.ip= IPOne.ip) AS os,
(SELECT MIN(browser) FROM analytics BroOne WHERE bid='$id' AND BroOne.ip= IPOne.ip) AS browser,
(SELECT MIN(resolution) FROM analytics ResOne WHERE bid='$id' AND ResOne.ip= IPOne.ip) AS resolution,
(SELECT MAX(timestamp) FROM analytics DateOne WHERE bid='$id' AND DateOne.ip= IPOne.ip) AS LatestDate
FROM analytics AS IPOne
WHERE bid='$id'
ORDER BY LatestDate DESC
LIMIT 15 OFFSET $offset";
이는 대용량 테이블에서 데이터를 가져오는 것이므로 0초가 걸리지 않을 것으로 예상되지만 ~21초보다는 시간을 줄이는 것이 좋습니다.
그거 좋지
SELECT ip, country_code, country,
MAX(region) as region,
MAX...
MAX(timestamp) as LatestDate
FROM analytics
WHERE bid = '$id'
GROUP BY ip, country_code, country
ORDER BY LatestDate DESC
LIMIT 15 OFFSET $offset";
다음으로 시작하는 인덱스가 있어야 합니다.bid
이 방법이 더 나을 수 있습니다.
INDEX(bid, ip, country_code, country)
복합 키를 설정해야 합니다.(bid, ip)
KEY를 설정한 경우(bid)
그런 다음 추가(또는 대체)(bid, ip)
언급URL : https://stackoverflow.com/questions/31633743/select-max-of-multiple-columns-in-mysql
반응형
'programing' 카테고리의 다른 글
IN 절에 대한 매개 변수가 있는 Oracle 저장 프로시저 (0) | 2023.07.26 |
---|---|
명령줄에서 Powershell 스크립트를 실행하고 디렉터리를 매개 변수로 전달하는 방법 (0) | 2023.07.26 |
Mariadb 10.4 부 버전 검토 (0) | 2023.07.26 |
Spring Boot (0) | 2023.07.26 |
PHP를 사용하여 URL에서 후행 슬래시를 제거하는 가장 좋은 방법 (0) | 2023.07.26 |