복붙노트

[SQL] 여기서 () 절 성능 내부에 가입하고?

SQL

여기서 () 절 성능 내부에 가입하고?

나는이 쿼리와 동일한 결과를 얻을 수 있지만, 어느 쪽이 가장 빠른, 가장 효율적인가요?

여기서 ()에서 또는 내 가입?

SELECT `stats`.`userid`,`stats`.`sumpoint` 
FROM  `stats` 
INNER JOIN users
ON `stats`.`userid` = `users`.`userid` 
WHERE `users`.`nick` =  '$nick'

ORDER BY `statoylar`.`sumpoint` DESC  limit 0,10

SELECT `stats`.`userid`,`stats`.`sumpoint` 
FROM  `stats` 
WHERE userid
IN (
SELECT userid
FROM  `users` 
WHERE  `users`.`nick` =  '$nick'
)
ORDER BY `stats`.`sumpoint` DESC  limit 0,10

해결법

  1. ==============================

    1.당신의 SQL 엔진에 따라 다릅니다. 합리적인 쿼리 옵티 마이저가 최근 SQL 시스템은 대부분 같은 계획에 두 쿼리를 다시 작성합니다. 일반적으로 서브 쿼리 (두 번째 쿼리)를가 (첫 번째 쿼리)에 가입하여 다시 작성됩니다.

    당신의 SQL 엔진에 따라 다릅니다. 합리적인 쿼리 옵티 마이저가 최근 SQL 시스템은 대부분 같은 계획에 두 쿼리를 다시 작성합니다. 일반적으로 서브 쿼리 (두 번째 쿼리)를가 (첫 번째 쿼리)에 가입하여 다시 작성됩니다.

    그들은 외부 쿼리를 실행하기 전에 임시 메모리 테이블에 하위 쿼리를 실행할 수 있기 때문에 큰 쿼리 옵티 마이저이 없을 수 있습니다 간단한 SQL 엔진에서 빨리해야 가입 할 수 있습니다.

    더 많은 데이터를 생성하는 - 제한된 메모리 풋 프린트가 일부 SQL 엔진 그러나, 하위 쿼리는 가입이 필요하지 않기 때문에 빠를 수 있습니다.

    그래서, 요약, 그것은 의존한다.

  2. ==============================

    2.성능이 SELECT를 EXPLAIN으로 두 쿼리를 실행 확인하는 .... AFAIK, 내부 조인 빠른 IN보다 BTW 테이블 엔진 MYISAM 또는 INNODB의 당신의 유형은 무엇인가

    성능이 SELECT를 EXPLAIN으로 두 쿼리를 실행 확인하는 .... AFAIK, 내부 조인 빠른 IN보다 BTW 테이블 엔진 MYISAM 또는 INNODB의 당신의 유형은 무엇인가

  3. ==============================

    3.또 다른 옵션은,이 존재한다. 나는 그래서 TSQL 사람이야 ....

    또 다른 옵션은,이 존재한다. 나는 그래서 TSQL 사람이야 ....

    SELECT s.[userid], s.[sumpoint] 
    FROM stats AS s
    WHERE
         EXISTS (
         SELECT 1
         FROM users AS u
         WHERE
             u.[userID] = s.[userID]
             AND u.[nick] = '$nick'
         )
    ORDER BY s.[sumpoint] DESC
    

    나는 대부분의 엔진에서 사용할 수 EXISTS 생각합니다. 그것은 꽤 빨리 일반적입니다.

    에서의 SQL 서버는 적어도 (2005 +)는 IN 사이에 전혀 성능 차이가없는 문제의 열이 Null을 허용하지 않습니다 경우에 존재한다.

    아마 무관하지만 헤이 .....

  4. from https://stackoverflow.com/questions/5274618/inner-join-and-where-in-clause-performance by cc-by-sa and MIT license