>  기사  >  데이터 베이스  >  mysql의 조인 쿼리와 다중 쿼리 방법은 무엇입니까?

mysql의 조인 쿼리와 다중 쿼리 방법은 무엇입니까?

PHPz
PHPz앞으로
2023-06-02 16:29:16899검색

    조인 쿼리와 다중 쿼리 비교

    MySQL 다중 테이블 관련 쿼리가 더 효율적인가요, 아니면 다중 단일 테이블 쿼리가 더 효율적인가요?

    데이터의 양이 충분하지 않은 경우 조인을 사용하는 데에는 문제가 없지만 일반적으로 서비스 계층에서 수행됩니다.

    첫 번째: 독립형 데이터베이스 컴퓨팅 리소스는 매우 비싸고 데이터베이스가 서비스를 제공해야 합니다. 쓰기와 읽기가 동시에 필요하므로 데이터베이스의 처리량을 높이고 비즈니스에서는 수백 마이크로초에서 밀리초의 지연 간격에 신경 쓰지 않기 위해 더 많은 계산을 수행합니다. 결국 컴퓨팅 리소스는 수평적으로 쉽게 확장할 수 있고 데이터베이스는 아 어렵기 때문에 대부분의 기업은 순수한 컴퓨팅 작업을 서비스 레이어에 두고 데이터베이스를 트랜잭션 기능이 있는 kv 시스템으로 사용하게 됩니다. 비즈니스와 가벼운 DB를 강조하는 아이디어

    두 번째: 많은 복잡한 비즈니스는 역사적인 개발 이유로 인해 하나의 데이터베이스만 사용할 수 없습니다. 일반적으로 여러 데이터베이스에 미들웨어 레이어가 추가됩니다. 당연히 비즈니스는 서비스 계층을 추상화하여 데이터베이스에 대한 결합을 줄입니다.

    셋째: 일부 대기업의 경우 데이터 규모가 크기 때문에 하위 데이터베이스 및 하위 테이블을 적용해야 하는 경우 조인 사용에도 많은 제한이 따릅니다. 단, 비즈니스에서 분할 키를 기반으로 요구 사항을 명확하게 정의할 수 있는 경우는 제외됩니다. 결합된 두 테이블은 동일한 물리적 데이터베이스에 있습니다. 미들웨어는 일반적으로 데이터베이스 간 조인을 제대로 지원하지 않습니다.

    매우 일반적인 비즈니스 예를 들면, 하위 데이터베이스와 하위 테이블에서 두 테이블을 동시에 업데이트해야 합니다. 두 테이블은 데이터 일관성을 보장하기 위해 사용하는 것입니다. 분산 트랜잭션 중간 소프트웨어는 두 개의 업데이트 작업을 하나의 트랜잭션에 넣지만 이러한 작업에는 일반적으로 전역 잠금이 필요하므로 일부 기업에서는 단기적인 데이터 불일치를 허용할 수 있습니다. 별도로 업데이트하도록 놔두지만 데이터 쓰기 실패 문제가 발생하므로 예약된 작업을 시작하고 A 테이블에서 실패한 행을 검색한 다음 B 테이블도 성공적으로 기록되었는지 확인한 다음 두 연결을 쌍으로 연결합니다. 현재로서는 조인을 사용하여 레코드 수정을 수행할 수 없습니다. 데이터는 서비스 계층으로 가져오고 애플리케이션 자체에서만 병합할 수 있습니다. . .

    실제로 관계형 쿼리를 분해하여 쿼리를 재구성하면 다음과 같은 장점이 있습니다.

    캐싱을 더 효율적으로 만듭니다.

    많은 애플리케이션이 단일 테이블 쿼리에 해당하는 결과 개체를 쉽게 캐시할 수 있습니다. 또한, MySQL의 쿼리 캐시의 경우 연결에 있는 테이블이 변경되면 쿼리 캐시를 사용할 수 없으며, 분할 후 테이블이 거의 변경되지 않으면 해당 테이블을 기반으로 한 쿼리가 반복될 수 있습니다.

    쿼리를 분해한 후 단일 쿼리를 실행하면 잠금 경합을 줄일 수 있습니다.

    애플리케이션 계층에서 연결하면 데이터베이스를 더 쉽게 분할하고 높은 성능과 확장성을 얻을 수 있습니다.

    쿼리 자체의 효율성도 향상될 수 있습니다

    중복된 기록에 대한 쿼리도 줄일 수 있습니다.

    더 나아가 이는 MySQL의 중첩 링 연결을 사용하는 대신 애플리케이션에서 해시 연결을 구현하는 것과 동일합니다. 일부 시나리오에서는 해시 연결이 훨씬 더 효율적입니다.

    쿼리문 실행 순서, on, where

    MySQL 실행 순서

    1. 일반적인 SELECT 문의 전체 실행 순서

    1) from 절은 다양한 데이터 소스의 데이터를 조합합니다.

    2) on을 사용하여 수행합니다. 조인 연결을 위한 데이터 필터링

    3) where 절은 지정된 조건에 따라 레코드 행을 필터링합니다.

    4) group by 절은 데이터를 여러 그룹으로 나눕니다.

    5) 큐브, 롤업

    6) 계산에 집계 함수가 사용됩니다.

    7) had 절을 사용하여 그룹화를 필터링합니다.

    8) 모든 표현식을 계산합니다.

    9) 선택 필드를 계산합니다.

    10) 데이터 중복을 제거합니다.

    11) 결과 집합을 정렬합니다.

    12) TOPN 데이터 선택

    2. from

    tableA, tableB의 연관을 사용하면 이 두 테이블을 먼저 데카르트 곱으로 구성한 후 where 및 group by와 같은 다음 작업을 수행합니다.

    3. on

    왼쪽 조인, 내부 조인 또는 외부 완전 조인을 사용하는 경우 조건을 필터링한 후 조인합니다.

    아래 2개의 SQL과 결과를 보세요. 둘 사이의 차이점은 on 및 where 문 뒤의 위치에 있습니다. 먼저 조건 필터링에 on을 사용한 다음 조인 연산을 수행하고 where 조건 필터링을 적용합니다.

    조인을 사용하여 먼저 연결한 다음 필터링에 사용하면 데카르트 곱이 형성됩니다. 이러한 왼쪽 조인과 직접 조인 사이에는 차이가 없습니다. 따라서 먼저 조건을 필터링한 다음 가입해야 합니다.

    WHERE 이후 및 ON 이상에서 JOIN 연산을 수행하는 경우 다음 두 SQL 쿼리의 결과는 동일해야 합니다. 조인 후 집합에 대한 필터링이 어디에 있는지 알 수 있습니다.

    요약: 먼저 조건 필터링을 수행한 다음 가입하고 마지막으로 Where 필터링을 수행합니다

    SELECT DISTINCT a.domain , b.domain
    FROM mal_nxdomains_raw a
    LEFT JOIN mal_nxdomains_detail b ON a.domain = b.domain AND b.date = ‘20160403'
    WHERE a.date = ‘20160403'

    mysql의 조인 쿼리와 다중 쿼리 방법은 무엇입니까?

    SELECT DISTINCT a.domain , b.domain
    FROM mal_nxdomains_raw a
    LEFT JOIN mal_nxdomains_detail b ON a.domain = b.domain #and b.date = ‘20160403'
    WHERE a.date = ‘20160403'
    AND b.date = ‘20160403'

    mysql의 조인 쿼리와 다중 쿼리 방법은 무엇입니까?

    四、on 条件与where 条件

    1、使用位置

    • on 条件位置在join后面

    • where 条件在join 与on完成的后面

    2、使用对象

    • on 的使用对象是被关联表

    • where的使用对象可以是主表,也可以是关联表

    3、选择与使用

    主表条件筛选:只能在where后面使用。

    被关联表,如果是想缩小join范围,可以放置到on后面。如果是关联后再查询,可以放置到where 后面。

    如果left join 中,where条件有对被关联表的 关联字段的 非空查询,与使用inner join的效果后,在进行where 筛选的效果是一样的。不能起到left join的作用。

    五、join 流程

    在表A和表B的联接中,从A表中选出一条记录,并将其传递到B表进行扫描和匹配。所以A的行数决定查询次数,B表的行数决定扫描范围。需要运行100次从A表中取出一条数据,然后进行200次比对,将结果存储到B表中。

    相对来说从A表取数据消耗的资源比较多。所以尽量tableA选择比较小的表。同时缩小B表的查询范围。

    但是实际应用中,因为二者返回的数据结果不同,使用的索引也不同,导致条件放置在on 和 where 效率是不一定谁更好。要根据需求来确定。

    위 내용은 mysql의 조인 쿼리와 다중 쿼리 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제