1

VARCHAR プライマリ キー インデックス ID を持つ mysql テーブルから特定の行を選択する必要があります。

したがって、クエリを使用します(ただし、明らかに 3 ではなく 13,000 の ID)

SELECT * FROM table1 WHERE ID IN ('id1928383','id3838339','id38383')

大部分のテーブルではこれで問題なく動作しますが (~0.2 秒)、一部のテーブルではクエリにさらに長い時間がかかります (~10 ~ 11 秒)。

機能しないテーブルの唯一の違いは、Data_length が大きいことですか? 遅いクエリを高速化する方法はありますか?

4

3 に答える 3

1

13,000 行を検索するには、リアルタイムで時間がかかります。各値について、次のことを行う必要があります。

  1. インデックスを処理してレコードの場所を見つける
  2. ページをページ キャッシュにロードする
  3. 結果を返す

または、テーブル スキャンを実行して各行を個別に読み取り、リストと比較することもできます。どの方法が使用されているかを判断するために、長期実行バージョンの説明を提供できますか。

インデックスの値を調べると、大きなテーブルはページ キャッシュに収まらないと推測されます。これにより、ほとんどの値で追加のページ読み取りヒットが発生します。

最も簡単な解決策は、ページ キャッシュのサイズを増やすことです。すべての ID を一時テーブルに入れて、それをより大きなテーブルに結合することもできます。これを行う場合、一時テーブルにインデックスを作成すると特に便利です。

于 2013-01-31T14:33:26.197 に答える
1

このクエリを高速化するためにできることがいくつかあります。

  • INTの代わりVARCHARに使用ID

一般に、コンピューターは文字列よりも数値の方がはるかに優れているため、これによりかなり高速になります。

  • IDを索引として追加します。

これにより、そのインデックス付きの列で順序付けされたテーブルが作成され、検索と順序付けが大幅に高速になります。

  • PDO を使用する

これを PHP で使用している場合は、PDO を使用することをお勧めします。PDO にはクエリ キャッシュ システムがあり、同じクエリが多数実行されている場合に結果を大幅に改善できるからです。他のプログラミング言語にも同様のメカニズムがあると思います。

  • MySQL のアップグレード

使用するすべてのソフトウェアについて、多くの理由から最新バージョンを使用することをお勧めします。私が間違っていなければIN、MySQL の古いバージョンでパフォーマンスの問題があり、数バージョン後に修正されましたが、あなたはそのバージョンをまだ使用している運の悪い少数の 1 人である可能性があります。


これは私ができる限りのことです。さらにヘルプが必要な場合は、詳細情報 (テーブル構造、データベース構造、プログラミング言語など) を投稿する必要があります。

于 2013-01-31T14:40:44.560 に答える
0

idすべての列にインデックスが付けられていることを確認してください。

于 2013-01-31T14:08:40.100 に答える