2

数十万行を超えるテーブルがあります。以下を使用する場合:

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

クエリは失敗しましたが、非常に小さなテーブルをテストしたので問題ありませんでした。現在のデータベースをバックアップしたかったので、次のリンクをたどりました。

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

何か案が?前もって感謝します!

4

1 に答える 1

1

大きなテーブルでは、このようなクエリを避ける必要があります。これにより、mysql のクラッシュまたはサーバー ダンプが発生する可能性があります。そして、それは問題ではありません。アドバイス:

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=> 結果 (全部で 32,415,735、クエリにかかった時間は 0.0184 秒)`

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

于 2013-06-04T07:30:18.550 に答える