-
- set_time_limit(0);
- function fnGet($filename)
- {
- $content = file_get_contents($filename );
- $content 반환;
- }
- function fnGetContent($filename)
- {
- $content = fnGet($filename);
- return $content;
- }
- $times=100000;
- echo '数据库查询结果:
';
- //--------- ------------
- $begin=fnGetMicroTime();
- for($i=0;$i<$times;$i )
- {
- $res =$dbcon->mydb_query("log_ID='1'인 블로그에서 log_Content 선택");
- $row=$dbcon->mydb_fetch_row($res);
- $content=$row[0] ;
- }
- echo 'fetch_row '.$times.' 다음:'.(fnGetMicroTime()-$begin).'秒
';
- //--------- -----------
- $begin=fnGetMicroTime();
- for($i=0;$i<$times; $i )
- {
- $res=$dbcon->mydb_query("SELECT log_Content FROM 블로그 WHERE log_ID='1'");
- $row=$dbcon->mydb_fetch_array($res) ;
- $content=$row['log_Content'];
- }
- echo 'fetch_array '.$times.' 다음:'.(fnGetMicroTime()-$begin).'秒
';
- //--------- -----------
- $begin=fnGetMicroTime();
- for($i=0;$i<$times; $i )
- {
- $res=$dbcon->mydb_query("SELECT log_Content FROM 블로그 WHERE log_ID='1'");
- $row=$dbcon->mydb_fetch_object($res) ;
- $content=$row->log_Content;
- }
- echo 'fetch_object '.$times.' 다음:'.(fnGetMicroTime()-$begin).'秒
';
- //--------- -----------
- $dbcon->mydb_free_results();
- $dbcon->mydb_disconnect();
- fnWriteCache('test.txt',$content);
- echo '直接读文件测试结果:
';
- //------------- -------
- $begin=fnGetMicroTime();
- for($i=0;$i<$times;$i )
- {
- $content = fnGetContent('test.txt');
- }
- echo 'file_get_contents直接读'.$times.'次时间:'.(fnGetMicroTime ()-$begin).'秒
';
- //----------------------- ----------
- $begin=fnGetMicroTime();
- for($i=0;$i<$times;$i )
- {
- $fname = ' test.txt';
- if(file_exists($fname))
- {
- $fp=fopen($fname,"r");//flock($fp,LOCK_EX);
- $ file_data=fread($fp, filesize($fname));//rewind($fp);
- fclose($fp);
- }
- $content = fnGetContent('test.txt');
- }
- echo 'fopen直接读'.$times.'次时间:'.(fnGetMicroTime()-$begin).'秒
';
复代码
4K 크기 데이터에 대한 쿼리 결과:
fetch_row 100000회 시간: 16.737720012665초
fetch_array 100000회 시간: 16.661195993423초
fetch_object 100000회 시간: 16.775065898895초
파일 테스트 결과 직접 읽기:
file_get_contents 직접 읽기 100000회 시간: 5.4631857872009초
fopen은 100000번 직접 읽습니다. 시간: 11.463611125946초
플라스틱 ID 쿼리 결과:
fetch_row 100000회 시간: 12.812072038651초
fetch_array 100000회 시간: 12.667390108109초
fetch_object 100000번 시간: 12.988099098206초
파일 테스트 결과 직접 읽기:
file_get_contents 직접 읽기 100000회 시간: 5.6616430282593초
fopen 직접 읽기 시간: 100000회: 11.542816877365초
테스트 결론:
1. 데이터베이스 쿼리보다 파일을 직접 읽는 것이 더 효율적이며 연결 및 연결 끊김 시간은 기사에 포함되지 않습니다.
2. 한 번에 읽는 내용이 클수록 파일을 직접 읽는 장점이 더욱 분명해집니다. (파일 읽기 시간이 약간 늘어나는데, 이는 파일 저장의 연속성 및 클러스터 크기와 관련이 있습니다.) 이는 예상했던 것과 정반대이며, 이는 MYSQL이 더 큰 파일을 읽기 위한 추가 작업을 수행할 수 있음을 나타냅니다(단순한 할당 변환인 경우 시간이 거의 30% 증가했습니다). 작은.
3. 파일 작성 및 INSERT 시 테스트를 하지 않으면 데이터베이스 효율성이 더 나빠질 수밖에 없다고 유추할 수 있습니다.
4. 작은 구성 파일은 데이터베이스 기능을 사용할 필요가 없다면 별도의 파일로 저장하는 것이 더 적합합니다. 사진, 음악 등의 대용량 파일은 따로 만들 필요가 없습니다. , 등은 파일 저장에 더 적합합니다. 편의상 경로나 썸네일과 같은 인덱스 정보만 데이터베이스에 넣는 것이 더 합리적입니다.
5. PHP에서 파일만 읽는 경우, 이 함수의 존재 여부를 확인하는 데 필요한 시간을 제외하면 file_get_contents가 fopen 및 fclose보다 효율적입니다. 이는 약 3초 더 짧습니다.
6. fetch_row와 fetch_object는 fetch_array에서 변환해야 합니다. PHP의 소스 코드를 본 적이 없습니다. 실행만 보면 fetch_array가 더 효율적이라는 것을 알 수 있습니다. 인터넷.
프로그램 효율성이 핵심 프로세스와 동일하고 캐싱 및 기타 조치가 포함되지 않는다고 가정하면 모든 유형의 데이터를 읽고 쓰는 것은 MSYQL 프로세스에 관계없이 파일을 직접 읽는 것만큼 빠르지 않습니다. (레코드 저장 영역과 동일) 따라서 이 모든 것의 전제는 콘텐츠가 읽기 전용이고 정렬 또는 검색 작업과 관련이 없다는 것입니다.
|