0

データベースに 300684 レコードのテーブルがあり、問題は、SQL クエリを実行すると応答に非常に時間がかかることです。応答時間を長くするための解決策はありますか? 私は phpmyadmin で作業していますが、別の SGBD を使用したくありません。ありがとうございました

これは私のクエリです:

    SELECT * FROM `gipeord_conjoint` WHERE COD_AG in ( select PPR from 
gestion_delegation.dataidentifpersonnel)

2 つのテーブルは 2 つの異なるデータベースにgipeord_conjointありdataidentifpersonnel、これは最初のデータベースの構造ですgipeord_conjoint

COD_AG int
NUM_CONJ int
SIT_CONJ varchar
PRF_CONJ varcha
NAT_CONJ varchar
DOTI_CONJ int
CIN_CONJ varchar

これは dataidentifpersonnel の構造です:

PPR int
CIN varchar
CD_POSITION varchar
CD_NATION varchar
CD_DIPS varchar
CD_DISCIP varchar
CD_STATUT varchar

... ... ...

4

2 に答える 2

2

絶対に... Select *... EVER を使用しないでください。


これは次のように言っています。

こんにちは、私のコンピューターがいつもより遅いのですが、その理由を教えていただけますか?

より具体的なサポートが必要な場合は、クエリを提示する必要があります。

現在のケースに関しては、300,684 レコードはそれほど多くないため、クエリが遅くなる理由にはなりません。

私の頭の上から

  • クエリが最適化されていない可能性があります。実行計画を見てください。(テーブルスキャンを探します)
  • 適切なインデックスがあることを確認してください。
  • 同時にリクエストを実行している人数を見てみましょう。
  • データベースにクエリを実行しているユーザーと、クエリの送信元を確認します。

クエリを追加して、さらにサポートできるようにします。

于 2013-05-10T14:44:46.277 に答える
0

inMySQL 5.6では、where句の最適化方法が変更されました (ここで説明されているように)。

in以前のバージョンの MySQL を使用している場合、出力のすべての行でサブクエリが実行されます。inexists句に変更することでこれを修正できます。

select gc.*
FROM `gipeord_conjoint` gc
WHERE exists (select 1 from gestion_delegation.dataidentifpersonnel dip where dip.PPR = gc.COD_AG)

上のインデックスを使用すると、これはさらに高速になりますgestion_delegation.dataidentifpersonnel(PPR)

于 2013-05-10T15:53:38.537 に答える