큰 테이블 (10m 행 약, 모든 가짜 테스트 데이터가 있습니다.).MySQL 검색 단일 및 다중 subselects
id 사용자와 작업은 모두 고유하지 않지만 사용자는 한 번만 작업을 수행 할 수 있습니다. (오직 id_user 및 id_action 중 하나 콤보가있을 것입니다 의미
x와 y는 모두 단 하나의 INT가 될거야 -.. 나는 모든 열을 색인 한 100
CREATE TABLE IF NOT EXISTS `test` (
`id_user` int(11) NOT NULL,
`id_action` int(11) NOT NULL,
`x` int(11) NOT NULL,
`y` int(11) NOT NULL,
KEY `x` (`x`),
KEY `y` (`y`),
KEY `id_user` (`id_user`),
KEY `id_action` (`id_action`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
그것은 내가 구축을 위해 노력하고있어 게임을합니다.
는 내가 뭘 원하는 Y에 의해 결정 범위 내에서, X의 비슷한 점수를 다른 사용자의 테이블을 검색 할 수 있습니다.
예를 들어, 사용자 1이 x가 75 인 작업 1을 수행하고 y가 10 인 경우. 나는 범위가 y에서 10 세트이므로 65-85 점을 얻은 다른 모든 사용자를 보여주고 싶습니다.
이
내가 있는데 난 그냥 300 초 후에 제한 시간을 초과 .. 내 로컬 노트북에 그것을 실행 것입니다 ... :(SELECT * FROM test
WHERE
id_user != 1 AND
x BETWEEN
((SELECT x from test WHERE id_action = 1 AND id_user = 1) - (100 - (SELECT y FROM test WHERE id_action = 1 And id_user = 1)))
AND
((SELECT x from test WHERE id_action = 1 AND id_user = 1) + (100 - (SELECT y FROM test WHERE id_action = 1 And id_user = 1)));
내가 가지고있는 10,000,000 행에이 검색 (100 100,000 명의 테스트 사용자가있는 액션 .. 모든 난수)가 실패합니다.
이제 테이블 자체에 대해 조사 할 것이지만 하위 선택이 더 효율적이라고 생각합니다. 여기로 가십시오 ... 조언은 높이 평가 될 것입니다 ... :)
나는 그것에 대해 생각하기에, 나는 테 100으로 혼란 스럽습니다 - 지금 당신의 아이디어를 실행 중입니다. .. 그것에 대해 생각하는 신의 방식 ... – Beertastic
안녕하세요, 내 대답은 당신의 문제를 해결합니까? – DavidLin
ABD 정말 도움이되었습니다. 슬프게도 프로젝트가 변경되었고이 질문은 더 이상 관련이 없습니다 ..하지만 그게 요점이 아니에요 .. 그래서 네, 도움이되었습니다 .. 교수형에두고 떠나 죄송합니다 .. 지금 업데이트하십시오! – Beertastic