여기서 요구 사항이 있습니다.
로컬 데이터베이스(1개):
1개의 테이블 user_local,
원격 데이터베이스(총 2개의 라이브러리, 5개의 테이블) 모든 정보는 uid를 통해 연결됩니다.
1개의 데이터베이스( user_data_a), 모든 사용자의 기본 정보인 user_basic 테이블은 단 하나뿐입니다. 다른 데이터베이스(user_data_b)의 나머지 4개 테이블은 두 개의 카테고리로 나누어집니다.
하나의 카테고리(테이블 중 두 개, user_profile_active 및 user_profile_not_active) 사용자 파일을 저장하기 위해 한 테이블은 활성 사용자용이고 다른 테이블은 비활성 사용자용입니다.
다른 유형의 테이블(다른 두 테이블 user_ext_info_active 및 user_ext_info_not_active)은 다른 사용자 정보를 저장하는 데 사용됩니다. 활성 사용자이고 다른 테이블은 비활성 사용자입니다.
예를 들어
user_basic에 있는 uid의 기록이 user_profile_active에 없으면 user_profile_not_active에 있고,
에 없으면
에 없습니다. user_ext_info_active이면 user_ext_info_not_active에 있습니다
이론적으로 말하면 active는 active에 해당하고 not_active는 not_active에 해당합니다.
현재 수요는 주로 user_basic을 사용하여 두 가지 유형의 테이블에서 사용자에 해당하는 정보의 특정 필드를 얻는 것입니다. (총 4개) 레코드를 하나로 합칩니다. 레코드는 로컬 user_local 테이블에 기록됩니다. 약 800,000개의 레코드가 있습니다. Master Qiu는 데이터베이스에 쿼리하지 않도록 이를 처리하는 방법에 대한 조언을 제공합니다. 루프를 실행하여 메모리 오버플로 및 시간 초과를 방지하세요~~ 부탁드립니다
프레임워크는 thinkphp5 .1
殘留の回憶2019-06-27 22:46:04
MySQL 데이터 성능이 좋으면 공동 테이블 작업을 작성하고 하나의 명령문으로 완료할 수 있지만 실제로는 시간 초과 및 메모리 오버플로가 발생하기 쉽습니다. 하나의 테이블만 별도로 작업하는 것이 좋습니다. 만약 이 테이블들이 모두 800,000개의 데이터를 가지고 있다면, 테이블을 연결해서 많은 양의 데이터를 쿼리하는 것은 두려운 일입니다. 솔직히 말해서 user_profile_active와 user_profile_not_active 두 데이터 테이블의 작업을 먼저 끝내고 다음 두 테이블인 user_ext_info_active와 user_ext_info_not_active
를 작업하는 것이 좋습니다.