8

o私は200万のレジスターを持つテーブルを持っていますが、それはもっとすぐに成長するでしょう。基本的に、このテーブルには、それぞれの記述子を持つ画像の関心のあるポイントが含まれています。クエリポイントに空間的に近いポイントを選択するクエリを実行しようとすると、合計実行時間が長すぎます。より正確には、持続時間/フェッチ=0.484秒/27.441秒。また、クエリは非常に単純で、17000行までしか返されません。

私の質問は:

SELECT fp.fingerprint_id, fp.coord_x, fp.coord_y, fp.angle,
fp.desc1, fp.desc2, fp.desc3, fp.desc4, fp.desc5, fp.desc6, fp.desc7, fp.desc8, fp.desc9, fp.desc10,
fp.desc11, fp.desc12, fp.desc13, fp.desc14, fp.desc15, fp.desc16, fp.desc17, fp.desc18, fp.desc19,
fp.desc20, fp.desc21, fp.desc22, fp.desc23, fp.desc24, fp.desc25, fp.desc26, fp.desc27, fp.desc28,
fp.desc29, fp.desc30, fp.desc31, fp.desc32
FROM fingerprint fp 
WHERE 
fp.is_strong_point = 1 AND 
(coord_x BETWEEN 193-40 AND 193+40) AND (coord_y BETWEEN 49-15 AND 49+15 ) 
LIMIT 1,1000000;

それが私がやったことです。

  1. で変更しようとしましkey_buffer_sizemy.iniが、あまり変更がありませんでした。
  2. さらに、coord_xとcoord_yをインデックスとして設定しようとしましたが、クエリ時間が遅くなりました。
  3. テーブルはcoord_xフィールドの範囲で分割されているため、より良い結果が得られました。

フェッチ時間を短縮するにはどうすればよいですか?ミリ秒に減らすことは可能ですか?

4

5 に答える 5

18

私も遅いフェッチの問題に直面しました(MySQL、InnoDB)。最後に、私のシステムではinnodb_buffer_pool_sizeがデフォルトで8MBに設定されていることがわかりました。これは、クエリを処理するのに十分ではありません。1GBに増やした後、パフォーマンスは問題ないようです。

                    Duration / Fetch
353 row(s) returned 34.422 sec / 125.797 sec (8MB innodb buffer)
353 row(s) returned 0.500 sec / 1.297 sec (1GB innodb buffer)

アップデート:

innodb_buffer_pool_sizeを変更するには、これをmy.cnfに追加します

innodb_buffer_pool_size=1G

mysqlを再起動して有効にします

参照:Mac OS上のMySQLでinnodb_buffer_pool_sizeの値を変更するにはどうすればよいですか?

于 2013-11-01T05:02:40.577 に答える
0

私が正しければ、クエリは本当に高速ですが、遅いのはデータベースからのデータのフェッチです。ストレージから170000の結果をロードするのに27秒かかります。

間違ったデータベースタイプを使用しているようです。テーブルをあるデータベースエンジンから別のデータベースエンジンに切り替えてみてください。

最高速度を得るには、MEMORYエンジンを使用できます。唯一の欠点は、動的な変更を行う必要がある場合はそのテーブルのコピーを別のエンジンに保存する必要があり、変更後に差異またはテーブル全体を再ロードする必要があることです。

また、サーバーを再起動したときに起動するスクリプトを作成して、mysqlサーバーの起動時にメモリテーブルが読み込まれるようにする必要があります。

ドキュメントについてはこちらをご覧ください

于 2013-03-21T12:15:36.693 に答える
-1

バッファサイズを増やすと、myqueryが高速になります。ただし、my.iniファイルをメモ帳として開くと16進データになるため、メモ帳++として開く必要があります。

于 2021-10-29T08:16:55.670 に答える
-2

修正が見つかりました。システムでAVGまたはアンチヴリスを無効にしてから、ワークベンチを再起動してください。

于 2019-11-09T10:11:48.427 に答える
-2

その行がpom.xmlに書き込まれていないことを確認してください。

<property name="hbm2ddl.auto">create</property>

書かれている場合は削除します。

于 2020-03-05T13:13:03.740 に答える