2016-05-11 14 views
1

2つのテーブル - 情報とコメントがあります。 infoには27万行、コメントには10​​0行しかありません。LIMITコマンドでMysqlのテーブルサイズがランタイムに影響するのはなぜですか?

私は、データベースからデータを選択し、それをjson形式にエンコードするPHPスクリプトを実行します。 PHPスクリプトでは、応答は最初の10行のみに制限され、Info.phpとComments.phpの両方のPHPファイルは名前を除いてまったく同じです。

なぜ最初の10行しか印刷しない場合、270,000行のテーブルが100個のローよりも読み込みに時間がかかるのはなぜですか? コメントに1秒かかり、情報に10秒かかります。

これは、非常に単純なPHPのクエリ・コードです:

Info.php:$query = "SELECT * FROM info ORDER BY id LIMIT 10;";

Comments.php:テストの目的については$query = "SELECT * FROM comments ORDER BY id LIMIT 10;";

、彼らの両方が同じ列と同じデータを持っています唯一の違いは行番号です。 Comments.php結果ながら

select from database time: 0.6090 seconds 
time taken to decode JSON: 6.4736 seconds 

Info.php:だから私はPHPとで時間をテストしたことが原因のMySQLのかもしれません

select from database time: 0.7309 seconds 
time taken to decode JSON: 1.7178 seconds 

おかげ

+0

データベースクエリの前と後にタイマーを作成してから、jsonエンコーディングの前後にタイマーを作成します。これはデータベースかエンコーディングですか?各テーブルにはいくつの列がありますか? – Dale

+0

データベースが責任があると思われる場合は、クエリの説明を行い、結果を投稿してください。 – e4c5

+0

@Dale テスト目的では、両方とも同じ列と同じデータを持ちますが、唯一の違いは行番号です。データベース時間から 選択:だから私はPHPとInfo.php結果と回をテストしたJSONをデコードするために取ら0.6090秒 時間:Comments.php結果しばらく6.4736秒 を: データベース時間から選択します。デコードに取ら0.7309秒 時間をJSON:1.7178秒 – Yakirbu

答えて

0

は、句の実行を選択します注文。 MySQLエンジンでは、最初にidカラムでテーブル内のすべてのローをソートし、そのリミット後に10ローにソートする必要があります。 Take a look at this answer.

+1

実際に私は 'ORDER BY'コマンドを削除しようとしましたが、クエリ時間は変更されていません。 – Yakirbu

+0

ビューを使用して実行を高速化することを検討できますか?http://dev.mysql.com/doc/refman/5.7/en/views.html – Ance

+0

PHPを使用せずにクエリを実行できますか? mysqlのコマンドライン? – Ance

関連する問題