2009-10-20 4 views
0

사이트를 개발 중이며 데이터베이스를 쿼리하는 최선의 방법에 대한 의문점이 있습니다. 일반적으로 페이지를로드 할 때 데이터베이스에서 여러 데이터를 가져와야합니다. 내가 최선의 방법을하고 있는지 확실하지 않습니다. 그래서 지금과 페이지가 렌더링 될 때 나는 다음과 같은 함수를 호출 예를 들어이 예 감안할 때php 및 mysql을 사용한 성능

(...) 
(a) -> getAuthorName()   // 1 db connection - 1 db query 
(b) -> getAuthorLocation()  // 1 db connection - 1 db query 
(consider that here it could come more info the author....) 

(...) 
(c) count<- countNumberBooks() // 1 db connection - 1 db query 
(d) if(count == 0) 
(e)//do something 
else 
(f) books<- getBooksByAuthor() // 1 db connection - 1 db query 
(g) renderBooks... 

, 내 질문은 :

  1. (a)와 (b을하는 것이 좋습니다) 하나의 단일 함수에 데이터베이스에 단 하나의 쿼리를 가지고?
  2. (f)를 수행하고 결과를 계산 한 다음 (e) 또는 (g)를 수행하는 것이 더 좋습니까? 이렇게하면 (C)를 제거 할 수 있습니까?
  3. 또는 필요한 모든 것을 데이터베이스에서 한 번에로드하고, 데이터를 일종의 구조로 가져온 다음 페이지를 렌더링 할 때 읽을 수 있습니까?

고마워요! 그것은 당신의 서버에 대한 모든 요소 종류에 따라 달라집니다 당신이 매우 매우 바쁜 사이트에 게시하지 않는

+0

표준 대답 (특히, 다른 왕복이 필요) 무료 꽤 싼 것이 아니라, 많은 것들. 코드 프로파일 링을 시도하십시오 - 단일 사용자가 다양한 가능성을 얼마나 빨리 실행합니까? 코드로드 테스트를 해보십시오. 수백 가지 요청을 1 초 이상 받으면 어떤 차이가 있습니까? –

답변

0

빠른 답변 :

1) 예는 것이 좋습니다 가능할 때 한 행에서 가능한 한 많은 데이터를 가져오고, 분할하지는 마십시오.

2)이 방법은 조금 더 다릅니다. 가져 오는 데이터를 항상 사용한다면, 가져 오는 것이 더 낫고, PHP에서 카운트하는 것이 좋습니다.

3)이 질문은 일반적인 답을 얻기에는 다소 복잡합니다. 어떤 종류의 ORM을보고 싶을 수도 있습니다.

1

당신은, 그러나, 테스트하고 측정하는 데이터베이스 스키마 등 등

을해야합니다 진짜 대답은 그것이 중요하지 않다는 것입니다. 어떤 솔루션이라도 유지하기 쉽고 사이트에서 성능 문제가 발생하기 시작하면 프로필을 작성하여 문제가 무엇인지 찾아야합니다.

0

이 질문에 완전히 대답하지 않을 수도 있지만 어쨌든 도움이 될 것입니다 : 나는 "SELECT * FROM authors where id = $ author_id"를 수행하고 결과를 객체 (mysql_fetch_object (..))로 가져 오는 것을 선호합니다. 당신은 당신이 새로운 SQL 쿼리를마다하지 않고해야 할 수있는 저자의 데이터를 참조 할 수 있습니다이 방법 :

$sql = "SELECT * FROM authors WHERE id = $author_id"; 
$sth = mysql_query($sql); 
if ($author_obj = mysql_fetch_object($sth)) { 
    echo "Author name: " . $author_obj->name; 
} 

등 ...

0

일반적으로 적은 수의 쿼리로 더 많은 정보를 데이터베이스에서 얻는 것이 좋습니다. 그러나 이것은 코드 재사용과 유지 보수를 무효로하는 경우가 있기 때문에 절충해야합니다.

또 하나의 쿼리를 저장하기 위해 전혀 다른 테이블의 UNION 관계없는 정보와 같은 반 패턴을 사용하지 마십시오. 그것은 장기적으로 아무에게도 도움이되지 않습니다.

분명히하지 말아야 할 것은 쿼리 루프가 있다는 것입니다. 그러나 간단한 일회성 쿼리를 발행하는 것만으로는 충분하지 않습니다 (특히 데이터베이스의 대기 시간이 짧고 페이지가 너무 자주 방문하지 않는 경우).그건 아마에 따라 달라집니다

당신은 아마 데이터베이스에 연결로, 동일한 연결을 사용해야하는 문제를 어떻게 모든 쿼리

관련 문제