2010-07-15 5 views
12

나는 "사이트 1"이라고 말하는 데이터베이스를 사용하는 웹 사이트를 가지고 있습니다. 나는 "site1"의 테이블 중 일부를 사용할 동일한 서버에 다른 사이트를 추가 할 계획입니다.다른 데이터베이스의 테이블 조인의 성능 영향

"site1"(첫 번째 사이트의 특정 데이터), "site2"(두 번째 사이트의 특정 데이터) 및 "general"(일반 테이블)과 같은 세 가지 데이터베이스를 사용해야합니까? 데이터베이스 일반과 site1 및 site2간에 join 문이 있습니다. 또는 모든 테이블을 하나의 데이터베이스에 저장해야합니까?

가장 좋은 방법은 무엇입니까? 각 상황마다 공연의 차이점은 무엇입니까? MySQL을 사용하고 있습니다. 그렇다면 MySQL은 어떤 상황입니까?

미리 감사드립니다 ...

+0

dbs가 모두 동일한 서버에 있다고 가정하는 것이 맞습니까? –

+0

예. 그리고 이미 다른 데이터베이스의 테이블을 결합하려고했습니다. 그것은 작동합니다. –

답변

3

나는 최근 개인적인 경험을 통해 말할 수 있습니다. 나는 상대적으로 작은 데이터베이스에서 잘 작동하는 일부 PHP 코드에서 오래된 mysql 쿼리를 가지고 있지만 질의가 커짐에 따라 쿼리 속도가 느려지고 느려진다.

나는 내가 작성한 다른 관리 PHP 응용 프로그램과 함께 자체 데이터베이스에서 myserver를 실행하고 있습니다. freeradius 테이블은 150 만회 이상입니다. 내 애플 리케이션의 데이터베이스에서 freeradius 데이터베이스에 테이블을 조인하려고했다. 나는 150 만 행이 너무 많다고 말할 수있다. 일부 쿼리를 실행하면 내 앱이 모두 잠겨 있습니다. 나는 일을 다르게 (즉, 다른 데이터베이스에서 2 개의 테이블에 합류하지 않는) 나의 PHP 애플 리케이션의 일부를 다시 작성해야만했다. 또한 일부 주요 필드에서 반경 계산 테이블의 색인을 생성하고 일부 쿼리를 최적화했습니다 (mysql EXPLAIN 문이 도움이됩니다). 상황이 훨씬 빨라졌습니다.

정말 필요한 경우를 제외하고는 앞으로 다른 데이터베이스의 2 개 테이블을 결합하는 것을 주저 할 것입니다.

+2

DB 크기 때문에 속도 저하가 발생하지 않았습니까? 테이블이 같은 DB에 있더라도 속도 저하를 가장 잘 보았을 것입니다. – Costa

10

성능의 관점에서 볼 때 아무런 차이가 없습니다. 인덱스를 그대로두면 단일 DB 또는 다중 DB를 사용하고 있는지 여부를 알 수 없습니다.

성능 외에도 다음과 같은 두 가지 의미가 있습니다. 1. DB간에 외래 키를 사용할 수 없습니다. 2. DB의 용도에 따라 또는 응용 프로그램에 따라 DB 테이블을 구분하면 사용 권한을 쉽게 관리 할 수 ​​있습니다.

+4

내 대답은 모든 DB가 동일한 DB 서버에 있다고 가정합니다. 다른 DB 서버에 보관하면 성능 저하가 시작됩니다. –

+4

동일한 서버에있는 경우 MySQL의 DB를 통해 외래 키를 가질 수 있습니다. 하지만 다른 서버 나 다른 DBMS에있을 경우 어떤 일이 발생하는지 모릅니다. –

관련 문제