1

私はここでこのプロジェクトをフィラデルフィアの犯罪データで遊んでいます。このクエリを作成して、タイプと警察署ごとにインシデントを選択します。PHP と Zend では 21 秒かかりますが、コマンド ラインでは 3 秒未満です。

次のようなデバッグ出力で Zend_Db_Profiler を使用してデバッグします。

numQueries: 2
クエリ: 接続
経過秒数: 0.0019519329071045
クエリ: SELECT "インシデント".* FROM "インシデント" WHERE (dc_dist = '15') AND (lower(text_general_code) = 'homicide') GROUP BY "location_block"
経過秒数: 21.583115816116

同じ select ステートメントをコピーして sqlite3 コマンド ライン クライアントに貼り付けると、おそらく 3 秒かかります。

ここで何か不足していますか?Zend に 21 秒かかるのはなぜですか?

アップデート:

PDO を使用してスクリプトだけを実行しても、21 秒のクエリが発生します。

// Create (connect to) SQLite database in file
    $file_db = new PDO('sqlite:../db/crime.db');
    // Set errormode to exceptions
    $file_db->setAttribute(PDO::ATTR_ERRMODE, 
                            PDO::ERRMODE_EXCEPTION);

    $start_time = microtime(true);
    // Select all data from memory db messages table 
    $result = $file_db->query("SELECT 'incident'.* FROM 'incident' WHERE (dc_dist = '15') AND (lower(text_general_code) = 'homicide') GROUP BY 'location_block'");
    $end_time = microtime(true);

    $elapsed_time = $end_time - $start_time;

    print "query took " . $elapsed_time . " seconds\n";

出力:

クエリに 21.751929998398 秒かかりました

2回目の更新

それをすべて保持しているのは、SQLステートメントへの追加によるグループのようです。それを削除して、pdo スクリプトまたは zend フレームワーク アプリケーションを実行すると、コマンド ラインから直接実行した場合と同じ速度に達します。

「GROUP BY」句を使用すると、23 秒:

numQueries: 2
クエリ: 接続
経過秒数: 0.0007779598236084
クエリ: SELECT "インシデント".* FROM "インシデント" WHERE (dc_dist = '15') AND (lower(text_general_code) = 'homicide') GROUP BY "location_block"
経過秒数: 23.092380046844

'GROUP BY' 句を使用しない場合、1 秒未満:

numQueries: 2 クエリ: 接続
経過秒数: 0.0011060237884521
クエリ: SELECT "インシデント".* FROM "インシデント" WHERE (dc_dist = '15') AND (lower(text_general_code) = 'homicide')
経過秒数: 0.080777883529663

4

0 に答える 0