다음 두 쿼리를 동일한 구조로 테스트했습니다. 처음에는 4M 항목이 있고 33 초 만에 결과를 반환했습니다. 두 번째 테이블에는 29M 행이 있으며 쿼리를 실행 한 지 16 시간이 지났으므로 아직 수익을 얻지 못했습니다.쿼리 최적화
SELECT sbvpip*4 as smallbvpip,btnvpip*4 as buttonvpip, sum(amt_won)*400/count(*) AS winrate, count(*) as count
FROM holdem_hand_player_statistics
JOIN (
SELECT id_player AS pid2, id_hand AS hid, sbvpip
FROM holdem_hand_player_statistics
JOIN (
SELECT id_player AS pid, ROUND(avg(flg_vpip::int)*25) AS sbvpip
FROM holdem_hand_player_statistics
WHERE position = 8 AND cnt_players = 6
GROUP BY id_player
) AS auxtable
ON pid = id_player
WHERE position = 8 AND cnt_players = 6
) AS auxtable2
ON hid = id_hand
JOIN (
SELECT id_player AS pid4, id_hand AS hid2, btnvpip
FROM holdem_hand_player_statistics
JOIN (
SELECT id_player AS pid3, ROUND(avg(flg_vpip::int)*25) AS btnvpip
FROM holdem_hand_player_statistics
WHERE position = 0 AND cnt_players = 6
GROUP BY id_player
) AS auxtable3
ON pid3 = id_player
WHERE position = 0 AND cnt_players = 6
) AS auxtable4
ON hid2 = id_hand
WHERE POSITION = 0 and cnt_players = 6
GROUP BY sbvpip,btnvpip
ORDER BY 1,2;
이 쿼리를 더 빠르게 실행하려면 어떻게해야합니까?
테이블이 손상 되었습니까? 한 테이블은 다른 테이블보다 7 ~ 8 배 크기지만, 처리하는 데 15000 배의 시간이 더 걸립니다. 정상입니까?
다른 의견을 환영합니다!
영어가 확실하지 않은 경우 다른 방법으로 자신을 표현하려고 노력한다는 사실을 알려주세요. id_hand, id_player 위치 : 나는 그들 중 3 인덱스이며, 사용하고있는 변수에서
:
는추가 정보, 도움 주셔서 대단히 감사합니다. 기본 키는 (id_hand, id_player)입니다. 이 테이블에는 총 129 개의 열과 6 개의 인덱스가 있습니다.
두 테이블 모두에서 EXPLAIN을 실행했는데 다른 결과가 나타납니다. 결과는 gdocs 스프레드 시트에 있습니다. https://spreadsheets.google.com/ccc?key=tGxqxVNzHYznb1VVjtKyAuw&authkey=CJ-BiYkN&authkey=CJ-BiYkN#gid=0
, 그것은 당신을 도울 거의 불가능하다. EXPLAIN의 결과도 표시 할 수 있습니까? –
프랭크, 내가 집에 도착하면 나는이 정보를 얻고 그것을 게시 할 것이다. 감사. – joaoavf
테이블에 정기적으로 진공 청소기를 사용하고 있습니까? –