2017-07-18 3 views
-1

dbのデータベースを呼び出し、数百行の小さなテーブルをxと呼び、さらに大きいものを10k行のyと呼ぶことができます。大きなテーブルをリストした後にSQLクエリが遅くなる


私はテーブルxにクエリを発行すると、クエリは基本的なクエリSELECT * FROM x LIMIT 25の使用に関する0.0003秒で何の問題もなく発行されます。

enter image description here

これは、すべてのクエリを処理するために、0,3msについて取ってdb内のすべての小さなテーブルに適用されます。

しかし、同じ基本クエリSELECT * FROM y LIMIT 25をテーブルyに発行した後、プロセスはかなり遅くなります。場合によっては100msを処理することがあります。

Snip


それはテーブルyテーブルxの照会時間のクエリ時間に影響を与えます。

Snip


問題は、いずれかのテーブル xの物件数回の再発行や dbに別の小さなテーブルをリストアップした後、離れて行くように思われます。別のデータベースのテーブルはまだ遅いです。

私は、クエリ速度を向上させるためにできる最適化とパフォーマンスの強化についてたくさん読んできました。しかし、いずれもこの問題をカバーしていないようです。

+1

ボットテーブルのフィールドは同じですか?彼らはFKを持っていますか?あなたは私たちに彼らの説明を教えてもらえますか、おそらくより良い方法であなたを助けることができます。 –

+0

私はキャッシングを考えるべきだと思います – RiggsFolly

+0

@VíctorLópezテーブルがどのように構造化されているかは関係ありません。私は、列数の少ない別のデータベースに大きなテーブルを持っていますが、それでも問題は発生します。そして、彼らはFK制約がありません –

答えて

1

最適化とパフォーマンスとテーブルサイズは問題ではありません。キャッシングがあります。

  • WHEREGROUP BY、またORDER BY何もありませんので、インデックスは関係ありません。

  • LIMIT 25ORDER BYなしでは、最初の25行を取得します。それらの後にいくつの行があるかは関係ありません。

  • "クエリキャッシュ"がオンの場合、最初にクエリを実行する時間が遅くなります。その後(キャッシュから出てくるまで)、それは "高速"になります - 0.3msはかなり一般的です。

  • QCがオフの場合でも、その違いを説明できる他のキャッシュがあります。

+0

ええ、クエリが実行されるたびに遅さが発生し、それが重要なキャッシング調整パラメータであることにかかわらず、後に実行されるすべてのクエリに影響しているように見えます。 –

+1

.notodb_buffer_pool_sizeその価値は何ですか?あなたはどれくらいのRAMを持っていますか? –

+0

'innodb_buffer_pool_size'がデフォルトの16Mに設定されました。私はその価値を変えました。そして確かに、物事はより速く走るようです。ありがとう! –

関連する問題