[java] 조인은 게으른 사람들을위한 것입니까?

최근에 JOIN (SQL)이 쓸모 없다고 주장한 다른 개발자와 토론을했습니다. 이것은 기술적으로 사실이지만 조인을 사용하는 것이 코드에서 여러 요청 및 링크 테이블 (C # 또는 Java)을 만드는 것보다 비효율적이라고 덧붙였습니다.

그에게 참여는 성능에 관심이없는 게으른 사람들을위한 것입니다. 이것이 사실입니까? 조인을 사용하지 않아야합니까?



답변

아닙니다. 우리는 그러한 잘못된 의견을 가진 개발자를 피해야합니다.

많은 경우에 데이터베이스 조인은 DB 왕복을 피하고 DB는 인덱스를 사용하여 조인을 수행 할 수 있기 때문에 클라이언트를 통해 수행되는 것보다 몇 배 빠릅니다.

내 머리 꼭대기에서 올바르게 사용 된 조인이 동등한 클라이언트 측 작업보다 느린 단일 시나리오조차 상상조차 할 수 없습니다.

편집 : 사용자 정의 클라이언트 코드가 간단한 DB 조인보다 효율적으로 작업을 수행 할 수있는 드문 경우가 있습니다 (meriton의 의견 참조). 그러나 이것은 예외입니다.


답변

동료가 SQL이없는 문서 데이터베이스 또는 키 값 저장소와 잘 어울리는 것처럼 들립니다. 그 자체로는 매우 훌륭한 도구이며 많은 문제에 적합합니다.

그러나 관계형 데이터베이스는 세트 작업에 최적화되어 있습니다. 많은 왕복 여행보다 훨씬 효율적인 조인을 기반으로 데이터를 쿼리하는 방법에는 여러 가지가 있습니다. 이것이 바로 rdbms의 다재다능 함입니다. nosql 스토어에서도 동일한 결과를 얻을 수 있지만, 종종 각기 다른 쿼리 특성에 적합한 별도의 구조를 구축하게됩니다.

한마디로 : 동의하지 않습니다. RDBMS에서 조인은 기본 입니다. 사용하지 않는 경우 RDBMS로 사용하지 않는 것입니다.


답변

글쎄, 그는 일반적인 경우에 틀렸다.

데이터베이스는 옵티 마이저 힌트, 테이블 인덱스, 외래 키 관계 및 기타 데이터베이스 공급 업체별 정보를 통해 다양한 방법을 사용하여 최적화 할 수 있습니다.


답변

아닙니다.

데이터베이스는 특별히 데이터 세트를 조작하도록 설계되었습니다 (분명히 ….). 따라서이 작업을 수행하는 데 매우 효율적입니다. 그는 본질적으로 자신의 코드에서 수동 조인을 수행함으로써 해당 작업을 위해 특별히 설계된 무언가의 역할을 인수하려고합니다. 그의 코드가 데이터베이스의 코드만큼 효율적일 가능성은 매우 먼 것입니다.

조인없이 따로 데이터베이스 사용의 요점은 무엇입니까? 텍스트 파일 만 사용할 수도 있습니다.


답변

“게으른”이 적은 코드를 작성하려는 사람들로 정의되면 동의합니다. “게으른”이 도구가 자신이 잘하는 일을하도록하려는 사람들로 정의된다면, 나는 동의한다. 그가 단지 Larry Wall (좋은 프로그래머의 속성과 관련하여)에 동의한다면, 나는 그에게 동의합니다.


답변

음, 조인은 관계형 데이터베이스가 테이블을 서로 관련시키는 방법입니다. 그가 무엇을 받고 있는지 잘 모르겠습니다.

데이터베이스를 여러 번 호출하는 것이 한 번의 호출보다 더 효율적일 수있는 방법은 무엇입니까? 또한 SQL 엔진은 이러한 종류의 작업을 수행하는 데 최적화되어 있습니다.

동료가 SQL을 배우기에는 너무 게으른 것 같습니다.


답변

그렇습니다.

성능 때문에 C # 대신 C ++를 사용해야합니다. C #은 게으른 사람들을위한 것입니다.

아니, 아니. 성능 때문에 C ++ 대신 C를 사용해야합니다. C ++는 게으른 사람들을위한 것입니다.

아니, 아니. 성능 때문에 C 대신 어셈블리를 사용해야합니다. C는 게으른 사람들을위한 것입니다.

네, 농담입니다. 조인없이 더 빠른 프로그램을 만들 수 있으며 조인없이 더 적은 메모리를 사용하여 프로그램을 만들 수 있습니다. 그러나 많은 경우 개발 시간이 CPU 시간 및 메모리보다 중요합니다. 약간의 성능을 포기하고 인생을 즐기십시오. 약간의 성능을 위해 시간을 낭비하지 마십시오. “당신은 왜 당신의 사무실에서 사무실로가는 고속도로를 만들지 않습니까?”