조인 쿼리와 다중 쿼리 비교
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'
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'
四、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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

MySQL과 Sqlite의 주요 차이점은 설계 개념 및 사용 시나리오입니다. 1. MySQL은 대규모 응용 프로그램 및 엔터프라이즈 수준의 솔루션에 적합하며 고성능 및 동시성을 지원합니다. 2. SQLITE는 모바일 애플리케이션 및 데스크탑 소프트웨어에 적합하며 가볍고 내부질이 쉽습니다.

MySQL의 인덱스는 데이터 검색 속도를 높이는 데 사용되는 데이터베이스 테이블에서 하나 이상의 열의 주문 구조입니다. 1) 인덱스는 스캔 한 데이터의 양을 줄임으로써 쿼리 속도를 향상시킵니다. 2) B-Tree Index는 균형 잡힌 트리 구조를 사용하여 범위 쿼리 및 정렬에 적합합니다. 3) CreateIndex 문을 사용하여 CreateIndexIdx_customer_idonorders (customer_id)와 같은 인덱스를 작성하십시오. 4) Composite Indexes는 CreateIndexIdx_customer_orderOders (Customer_id, Order_Date)와 같은 다중 열 쿼리를 최적화 할 수 있습니다. 5) 설명을 사용하여 쿼리 계획을 분석하고 피하십시오

MySQL에서 트랜잭션을 사용하면 데이터 일관성이 보장됩니다. 1) STARTTRANSACTION을 통해 트랜잭션을 시작한 다음 SQL 작업을 실행하고 커밋 또는 롤백으로 제출하십시오. 2) SavePoint를 사용하여 부분 롤백을 허용하는 저장 지점을 설정하십시오. 3) 성능 최적화 제안에는 트랜잭션 시간 단축, 대규모 쿼리 방지 및 격리 수준을 합리적으로 사용하는 것이 포함됩니다.

MySQL 대신 PostgreSQL을 선택한 시나리오에는 다음이 포함됩니다. 1) 복잡한 쿼리 및 고급 SQL 기능, 2) 엄격한 데이터 무결성 및 산 준수, 3) 고급 공간 기능이 필요하며 4) 큰 데이터 세트를 처리 할 때 고성능이 필요합니다. PostgreSQL은 이러한 측면에서 잘 수행되며 복잡한 데이터 처리 및 높은 데이터 무결성이 필요한 프로젝트에 적합합니다.

MySQL 데이터베이스의 보안은 다음 조치를 통해 달성 할 수 있습니다. 1. 사용자 권한 관리 : CreateUser 및 Grant 명령을 통한 액세스 권한을 엄격히 제어합니다. 2. 암호화 된 전송 : 데이터 전송 보안을 보장하기 위해 SSL/TLS를 구성합니다. 3. 데이터베이스 백업 및 복구 : MySQLDump 또는 MySQLPump를 사용하여 정기적으로 백업 데이터를 사용하십시오. 4. 고급 보안 정책 : 방화벽을 사용하여 액세스를 제한하고 감사 로깅 작업을 가능하게합니다. 5. 성능 최적화 및 모범 사례 : 인덱싱 및 쿼리 최적화 및 정기 유지 보수를 통한 안전 및 성능을 모두 고려하십시오.

MySQL 성능을 효과적으로 모니터링하는 방법은 무엇입니까? Mysqladmin, Showglobalstatus, Perconamonitoring and Management (PMM) 및 MySQL Enterprisemonitor와 같은 도구를 사용하십시오. 1. MySQLADMIN을 사용하여 연결 수를보십시오. 2. showglobalstatus를 사용하여 쿼리 번호를보십시오. 3.pmm은 자세한 성능 데이터 및 그래픽 인터페이스를 제공합니다. 4. MySQLENTERPRISOMITOR는 풍부한 모니터링 기능 및 경보 메커니즘을 제공합니다.

MySQL과 SqlServer의 차이점은 1) MySQL은 오픈 소스이며 웹 및 임베디드 시스템에 적합합니다. 2) SQLServer는 Microsoft의 상용 제품이며 엔터프라이즈 수준 애플리케이션에 적합합니다. 스토리지 엔진의 두 가지, 성능 최적화 및 응용 시나리오에는 상당한 차이가 있습니다. 선택할 때는 프로젝트 규모와 향후 확장 성을 고려해야합니다.

고 가용성, 고급 보안 및 우수한 통합이 필요한 엔터프라이즈 수준의 응용 프로그램 시나리오에서는 MySQL 대신 SQLServer를 선택해야합니다. 1) SQLServer는 고 가용성 및 고급 보안과 같은 엔터프라이즈 수준의 기능을 제공합니다. 2) VisualStudio 및 Powerbi와 같은 Microsoft Ecosystems와 밀접하게 통합되어 있습니다. 3) SQLSERVER는 성능 최적화에서 우수한 성능을 발휘하며 메모리 최적화 된 테이블 및 열 스토리지 인덱스를 지원합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
