에서 선택을 최적화 :MySQL을 - 나는 두 MySQL의 테이블, 상태 및 트랜스가 두 개의 연결된 테이블
:처럼 보이는id (INT) - also the primary key
energy (DOUBLE)
[other stuff]
트랜스 (14,000,000 개 항목) :
상태 (20 개 항목)처럼 보인다
i (INT) - a foreign key referencing states.id
j (INT) - a foreign key referencing states.id
A (DOUBLE)
나는 trans.A> 30. (say)로 trans의 모든 항목을 검색 한 다음 일치하는 각 항목에서 참조하는 (고유 한) 상태에서 에너지 항목을 반환하고 싶습니다. 그래서 저는 두 개의 중간 테이블을 가지고이 작업을 수행합니다 :
CREATE TABLE ij SELECT i,j FROM trans WHERE A>30.;
CREATE TABLE temp SELECT DISTINCT i FROM ij UNION SELECT DISTINCT j FROM ij;
SELECT energy from states,temp WHERE id=temp.i;
이것은 작동하는 것처럼 보이지만 중간 테이블 없이는 어떤 방법이 있습니까? 내가 트랜스에서 바로 하나의 명령으로 임시 테이블을 만들려고 할 때 :.이 두 배 큰 트랜스 테이블을 검색해야했기 때문에
CREATE TABLE temp SELECT DISTINCT i FROM trans WHERE A>30. UNION SELECT DISTINCT j FROM trans WHERE A>30.;
그것은 '나는 내가 할 수있는 MySQL로 새로 온 사람과 아마도 (더 긴했다 t는 해당 문제를 발견하고 인터 웹에 거기에 대답하는 것. 많은 감사를 기독교
감사합니다 귀하의 회신, Axarydax,하지만 그게 내가 원하는 건 아니에요 : 내가 trans.i와 trans.j의 연합에서 고유 (고유 한 항목 각각의 목록을하고 싶습니다 trans.A> 30, 그리고 이 목록에있는 각 id는 state.energy 값을 원합니다. 당신의 방법으로, 나는 trans.j와 일치하는 ID만을 얻고, 그 목록 내에서 중복을 얻을 것이다. 도움을 주셔서 감사합니다. 기독교 – xnx
업데이트 된 원본 텍스트 – Axarydax
다시 한 번 감사드립니다. 한 줄로 어떻게 작동하는지 확인할 수 있습니다. 하지만 시도 할 때 명령을 실행하는 데 매우 오랜 시간이 걸립니다 (10 분 및 대기 중 ...). 반면 중간 테이블을 사용하면 10 초 이내에 완료됩니다. MySQL에서 명령을 최적화 할 수있는 방법이 있는지 알고 계십니까? – xnx