>  기사  >  데이터 베이스  >  mysql 데이터베이스 간 쿼리 문제를 해결하는 방법

mysql 데이터베이스 간 쿼리 문제를 해결하는 방법

PHPz
PHPz앞으로
2023-05-27 14:03:282841검색

1. 첫 번째 유형의 데이터베이스 간 쿼리는 동일한 mysql 서버 아래에 있는 두 개의 다른 데이터베이스 간의 공동 쿼리입니다. 관계는 다음과 같습니다.

mysql 데이터베이스 간 쿼리 문제를 해결하는 방법

같은 mysql 서버 아래에 두 개의 다른 데이터가 직접 추가될 수 있습니다. 데이터베이스 이름을 추가하여 데이터베이스 간 쿼리 구현

select * from t_test1 t1, test2.t_test2 t2 where t1.id = t2.id

mysql 데이터베이스 간 쿼리 문제를 해결하는 방법

SQL 쿼리를 실행하여 결과 가져오기

mysql 데이터베이스 간 쿼리 문제를 해결하는 방법

2. 두 번째 유형의 데이터베이스 간 쿼리는 서로 다른 두 서버(물리적 서버) MySQL 서버에 설치됩니다. 데이터베이스 간 쿼리를 구현하며, 구현 원리는 가상 매핑과 유사하며, FEDERATED 스토리지 엔진은 로컬 테이블 대신 원격 데이터베이스의 테이블에 있는 데이터에 액세스합니다.

이 기능은 일부 개발 애플리케이션에 편리함을 제공합니다. 로컬에서 페더레이션된 테이블을 직접 구축하여 원격 데이터 테이블에 연결할 수 있습니다. 구성 후 로컬 테이블의 데이터를 원격 데이터 테이블과 직접 동기화할 수 있습니다. 실제로 이 엔진은 실제로 데이터를 저장하지 않으며 필요한 데이터는 다른 MySQL 서버에 연결하여 얻습니다.

MySQL은 기본적으로 연합 스토리지 엔진을 활성화하지 않으며 구성 파일에서 활성화해야 합니다.

#在[mysqld] 下 添加 federated 然后重启mysql服务就可以了
[mysqld]
federated

아래 표시된 대로:

mysql 데이터베이스 간 쿼리 문제를 해결하는 방법

#输入命令查看引擎开启状态
show engines;

활성화된 것을 확인할 수 있습니다

mysql 데이터베이스 간 쿼리 문제를 해결하는 방법

test1 데이터베이스 테이블에 가상 서버를 생성하고 test2 라이브러리의 t_test2 테이블을 test1 라이브러리에 매핑할 수 있습니다

CREATE TABLE `t_test2` (
  `id` int NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8mb3 COMMENT='远程测试表t_test2' CONNECTION='mysql://root:123456@127.0.0.1:3306/test2/t_test2' ;
/**

CONNECTION='mysql://root:123456$@127.0.0.1:3306/test2/t_test2' 这个配置是关键
root:代表远程数据库的用户
123456:代表远程数据的密码
127.0.0.1:代表远程数据库的ip地址,域名也可以
test2:代表远程数据库的数据库名称
t_test2:代表远程数据库中的哪一张表
**/

sql 문을 실행

mysql 데이터베이스 간 쿼리 문제를 해결하는 방법

이 테이블은 실제로 생성되지 않는 것을 볼 수 있습니다. 존재하면 그냥 원격 매핑입니다

mysql 데이터베이스 간 쿼리 문제를 해결하는 방법

FEDERATED 엔진을 사용하여 볼 수 있습니다

mysql 데이터베이스 간 쿼리 문제를 해결하는 방법

테이블이 생성된 후 sql을 작성하면

select * from t_test1 t1, t_test2 t2 where t1.id = t2.id

실행 결과를 볼 수 있습니다

mysql 데이터베이스 간 쿼리 문제를 해결하는 방법

Notes federated:

1. 로컬로 생성된 테이블 이름은 원격 서버에 있어야 하며, 생성된 필드는 원격 테이블의 필드여야 합니다. 로컬 스토리지 엔진

2. 로컬 가상 테이블의 구조를 수정해도 원격 테이블의 구조는 수정되지 않습니다.

3.truncate 명령은 원격 테이블 데이터를 삭제합니다.

4.drop 명령은 가상 테이블만 삭제합니다.

5.select count(*), select * fromlimit M, N과 같은 문장의 실행 효율이 매우 낮고, 데이터 양이 많을 경우 심각한 문제가 발생합니다. 기본 키 또는 인덱스 열 기준은 매우 빠릅니다. 예를 들어 다음 쿼리는 매우 느립니다(id가 기본 인덱스라고 가정)

select id from db.tablea where id >100 limit 10 ;

위 내용은 mysql 데이터베이스 간 쿼리 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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