2013-06-03 1 views
2

나는 수천 개의 행이있는 테이블이 있습니다. 아래에서 사용하는 경우 :Yii ADO를 사용하여 거대한 데이터 세트를 쿼리하는 데 문제가 발생했습니다

Yii::app()->db->createCommand('SELECT * FROM thistable')->query(); 

쿼리가 실패했지만 많은 작은 테이블을 테스트해도 문제가 없습니다. 나는 백업 내 현재 데이터베이스에 원했고, 나는이 링크를 따라 :

http://www.yiiframework.com/forum/index.php/topic/29291-full-database-backup/

어떤 생각을? 미리 감사드립니다!

+0

을 mysqldump는 (http://dev.mysql.com/doc/refman/을 사용하지 왜 5.6/ko/mysqldump.html)? –

+0

"실패"란 무엇을 의미합니까? 오류 메시지가 있습니까? –

+0

안녕하세요 발레리, 일부 웹 사이트 호스팅 회사는 우리에게 보안 문제에 대한 mysqldump 기능을 허용하지 않을 수도 있습니다. – user1342336

답변

1

큰 테이블에서 이러한 쿼리를 수행하지 않아야합니다. 그것은 mysql 크래시 또는 서버 덤프를 일으킬 수 있습니다. 그리고 그건 yii 문제가 아닙니다. 어드바이스 :

1. 인덱스 사용 (예 : COUNT) - 쿼리를 느리게하는 경우가 있습니다.

2. 질문에 항상 제한을 두십시오 : SELECT * FROM thistable LIMIT 50.

3. InnoDB를 총 사용 횟수로 사용하는 경우 EXPLAIN SELECT COUNT(*) FROM thistable을 사용하십시오. myISAM COUNT()에서 빠르게 작동합니다.

4. 모든 조인을 피하십시오. 심지어 작은 테이블 (< 100 레코드)에 조인하면 30-100 %의 쿼리 속도가 느려질 수 있습니다.

2 차 문제가 귀하의 문제라고 가정합니다. 예를 들어 :

SELECT * FROM thistable LIMIT 30 => 결과 (32415735 모든 쿼리는 0.0184 초 걸렸습니다.)`

SELECT COUNT(*) FROM thistable'=> result (31,912,535 all, Query took 215.14 sec.)

+0

고마워요! 나는 innoDB를 사용하고있다. 그러나 어떻게 LIMIT를 사용하여 데이터베이스를 백업 할 수 있습니까? 나는 모든 테이블을 querring이기 때문에 나는 조인을 사용하지 않을 것이다. – user1342336

+1

백업하려면 다른 것을 사용해야합니다. cron + 덤프 (고부하에는 효율적 임), rsync, 슬레이브로 복제하는 등의 방법이 많이 있습니다. 잘 설명 된 방법은 이미 있지만 PHP는 고부하에서 백업을 수행하지 않습니다. – ineersa

+0

감사. 내가 일하고있는 프로젝트는 PHP Yii 프레임 워크를 사용하고 있습니다. BTW, cron + dump는 무엇입니까? – user1342336

관련 문제