2012-12-16 3 views
1

전에 물어 본 경우 실례지만 비슷한 것을 찾고 있지만 아무것도 찾을 수 없습니다.PHP 파일 또는 mysql을 통해 수동으로 계산 하시겠습니까?

사용자, 취미 및 user_hobbies (처음 두 개 연결)의 세 가지 테이블이 있습니다. 나는 그들의 취미에 따라 2 명의 사용자 사이의 유사성을 계산하고 싶다. 이를 위해서는 두 가지 세트가 필요합니다 : 사용자 A 취미 및 사용자 B 취미 두 가지 간단한 쿼리로 얻을 수 있습니다. 이 두 세트를 다른 이유로 php 파일에서 계산해야하기 때문에 다음 배열에서 두 배열로 나와 사용할 수 있습니다.

공통 취미를 계산해야합니다 (예 : 세트).

아이디어 # 1 : 두 개의 배열이있어서 몇 가지 방법으로 공통 요소를 계산할 수 있습니다.

아이디어 # 2 : 세 번째 검색어 (예 : SELECT hobby FROM user_hobbies WHERE user_id IN ('uid_A', 'uid_B') GROUP BY hobby HAVING COUNT (*) = 2)를 만들 수 있으며 자신을 괴롭히지 않을 수 있습니다.

제 질문은 성능에 관한 것입니다. 수동으로 계산하는 것이 더 빠르지 않거나 mysql 쿼리가 훨씬 빠릅니까? 한마디로

+1

나는 스피드가 당신이 걱정하지 않는 문제라는 것을 알지 못한다면, 더 명확하고 쉽게 유지할 수있는 쪽을 선택하는 편이 좋다. –

답변

0

사용자 취미 테이블을 보유 할 정규화 된 테이블이 이미 있습니다. 왜 그렇게하지 않습니까?

일반적으로 말해서, SQL은 적어도 첫 번째 100k 레코드 정도면 훨씬 빠릅니다. 그런 다음 색인이 생성되지 않은 열이나 ORDER BY 키워드로 가져온 대용량 데이터 집합을 정렬하는 데 'filesort'를 사용하는 쿼리를 통해 성능을 저하시키는 쿼리가 표시됩니다.

확장 성을 위해 내부 결합을 사용하여 시동기의 가능성을 줄이는 것이 좋습니다.

이것에 대해 비판적으로 생각하십시오. 언급되지 않은 다른 열이 사용자가 하나 이상의 취미를 가질 수 있음을 나타낼 수 있습니까? 애플리케이션을 확장 할 때 고려해야 할 사항입니다.

그렇지 않으면 조기에 최적화해야하기 때문에 먼저 시작해야합니다.

옵션 # 2와 함께 갈 것입니다.

0

: 당신의 작업은 세트의 기본 동작을 아닙니다 경우는 MSSQL 또는 RDBMS에서 이동 될 것이 좋습니다.

MsSQL을 쉽게 확장 할 수 없기 때문에.

관련 문제