2010-03-20 2 views
1

며칠 전에이 질문을 게시했지만 원하는 내용을 정확히 설명하지 않았습니다. 나는 더 나은 공식화 된 질문을한다. 내 문제를 명확히하기 위해 새로운 정보를 추가했다 :SQL Inner Join : DB stuck

MyISAM 테이블이있는 MySQL DB가있다. 두 개의 관련 테이블은 다음과 같습니다

* orders_products: orders_products_id, orders_id, product_id, product_name, product_price, product_name, product_model, final_price, ... 
* products: products_id, manufacturers_id, ... 

(테이블에 대한에 대한 완전한 정보를 스크린 샷 제품 (Screenshot) 및 스크린 샷 orders_products (Screenshot)를 참조하십시오)

이제 내가 원하는 것은 이것이다 : - 주문한 모든 주문을 받기 manufacturer_id = 1 인 제품 및이 주문 제품의 제품 이름 (manufacturers_id = 1). 주문별로 그룹화. 내가 지금까지 무슨 짓을

은 이것이다 : 테스트를 위해

SELECT 
op.orders_id, 
p.products_id, 
op.products_name, 
op.products_price, 
op.products_quantity 
FROM orders_products op , products p 
INNER JOIN products 
ON op.products_id = p.products_id 
WHERE p.manufacturers_id = 1 AND 
p.orders_id > 10000 

p.orders_id> 10000는 몇 ORDER_ID 년대를 얻을 수 있습니다. 그러나 thies 쿼리가 작동하더라도 실행에 많은 시간이 걸립니다. SQL 서버가 두 번 갇혔다. 실수는 어디 있습니까?

+0

작은 색의 다이아몬드는 그 도구를 모르는 사람에게 아무런 의미가 없습니다. 정확한 DDL 문을 사용하는 것이 좋습니다. –

답변

2
SELECT 
op.orders_id, 
p.products_id, 
op.products_name, 
op.products_price, 
op.products_quantity 
FROM orders_products op 
INNER JOIN products p 
ON op.products_id = p.products_id 
WHERE p.manufacturers_id = 1 AND 
p.orders_id > 10000 

당신은 암시 적 및 EXPLICT 모두 (이 아주 나쁜 programmin 연습이다, 결코 다시 암시 적 조인 구문을 사용하는 메모를 확인하십시오) 제품 테이블에 조인하고, 코드를 찾고 있었다, 나는 당신이지고 있었다 의심 십자가 조인.

+0

고맙습니다. 그게 전부 야. =) – SurfingCat

1

인덱스가없는 경우 선택하면 많은 테이블 스캔이 생성 될 수 있습니다.

매우 큰 결과 집합을 되 찾는 중입니다. 임시 영역을 채울 수 있으며 이로 인해 문제가 발생할 수 있습니다.