2010-11-18 4 views
0

나는 PHP 페이지 쿼리 mysql 데이터베이스가 약 20000 행을 반환합니다. 그러나 브라우저는 20 분 넘게 걸릴 것입니다. 데이터베이스에 인덱스를 추가 했으므로 명령 행에서 쿼리 시간은 20000 행에 약 1 초입니다. 그러나 웹 응용 프로그램에서는 오래 걸립니다. 누구든지이 문제의 원인을 알고 있습니까? ? 당신의 date 컬럼에 인덱스를 추가PHP 쿼리 MYSQL 매우 느립니다. 그게 가능한 원인은 무엇입니까?

select * from table where Date between '2010-01-01' and '2010-12-31' 
$result1 = mysql_query($query1) or die('Query failed: ' . mysql_error()); 

while ($line = mysql_fetch_assoc($result1)) { 
    echo "\t\t<tr>\n"; 
    $Data['Date'] = $line['Date']; 
    $Data['Time'] = $line['Time']; 
    $Data['Serial_No'] = $line['Serial_No']; 
    $Data['Department'] = $line['Department']; 
    $Data['Team'] = $line['Team']; 

    foreach ($Data as $col_value) { 
     echo "\t\t\t<td>$col_value</td>\n"; 
    }; 
    echo "\t\t</tr>\n"; 
} 
+1

1 초는 여전히 꽤 길다. 해당 쿼리에 대한 EXPLAIN의 결과는 무엇입니까? – enobrev

+0

+ ---- + ------------- + -------- + ------- + ------------ --- + ------ + --------- + ------ + ------- + ------------- + | 이드 | select_type | 테이블 | 유형 | possible_keys | 열쇠 | key_len | 심판 | 행 | 추가 | + ---- + ------------- + -------- + ------- + ------------ --- + ------ + --------- + ------ + ------- + ------------- + | 1 | 단순 | 테이블 | 범위 | 날짜 | 날짜 | 9 | NULL | 14486 | 사용 위치 | + ---- + ------------- + -------- + ------- + ------------ --- + ------ + --------- + ------ + ------- + ------------- + – sean

+0

결과는 다음과 같습니다. 그것은 인덱스 (날짜)를 사용합니다. – sean

답변

2

보십시오 : 그것을 개선하기 위해 더 나은 방법은 다음 데이터를 검색하기 위해 내 PHP 코드입니다.

또한 EXPLAIN 명령에 대해 배우는 것이 좋습니다.

위의 설명에서 언급했듯이 1 초가 결과에 꽤 오래 있습니다.

모든 출력을 하나의 변수에 넣은 다음 루프가 완료되면 변수를 반향시킬 수도 있습니다.

또한 브라우저는 테이블을 표시하기 전에 테이블이 완전히 형성 될 때까지 기다리므로 결과가 느려집니다 (적어도 브라우저에서 결과를 빌드하는 프로세스는 느려집니다). 가능한 경우 목록이 더 좋게 나올 수 있습니다 (또는 다른 답변에서 권장하는대로).

+0

거대한 페이지를로드하는 경우 목록이 더 잘 작동합니다. 페이지가 여전히로드 중입니다. 하지만이 방법을 테이블 형식으로 사용할 수 있습니까? 가능합니까? – sean

+0

간단한 해결 방법은 테이블을 별도의 테이블 (테이블 당 또는 수십 개의 레코드)으로 분할하여 블록으로로드하는 것일 수 있습니다. 나는 너비와 높이를 설정하는 것과 같은 다른 조정이 가능하다고 생각하지만, 그런 일에 귀찮은 때부터 수년이 지났습니다.개인적으로 큰 테이블은 큰 유용성 문제 일 수 있다고 생각하지만, 필요하다면 그렇게하십시오. 브라우저에서 표를 더 빨리 표시 할 수 있도록 html/css 조정을 검색하고 싶을 것입니다. – enobrev

2

PHP는 속도가 느려지지만 브라우저 자체가 거대한 페이지를 렌더링하지 않습니다. 어쨌든 왜 모든 데이터를 표시해야합니까? 대신 결과에 매김을 지정해야합니다.

20,000 개의 테이블 요소로 정적 HTML 페이지를 구성 해보십시오. 얼마나 느린지 알 수 있습니다.

while ($line = mysql_fetch_assoc($result1)) { 
    echo "\t\t<tr>\n"; 
    foreach ($line as $col_value) { 
     echo "\t\t\t<td>$col_value</td>\n"; 
     flush(); // optional, but gives your program a sense of responsiveness 
    } 
    echo "\t\t</tr>\n"; 
} 

는 또한, 당신이 당신의 수용 속도를 증가해야합니다

또한 그 코드를 향상시킬 수 있습니다.

0

데이터베이스에 연결하기 전후의 시간을 에코하여 쿼리를 실행하고 코드를 출력함으로써 스크립트의 모든 단계를 수행 할 수 있습니다. 다른 단계를 수행하는 데 걸리는 시간을 알려줍니다. 실제로 지연이 아니라 쿼리를 일으키는 트래픽이라는 것을 알 수 있습니다.

반면에 수백만 개의 레코드가있는 테이블을 가져 오는 경우 인덱스가 지정되어 있어도 20000 개의 레코드를 검색하는 데 시간이 오래 걸릴 수 있습니다. 20 분은 극단적인데 ...

관련 문제