0

サーバーでクエリを実行するたびに、手動で終了する必要がある大きな一時停止が発生します。

ここにテーブルの制限があります

books   : isbn(PK)
books_a : id(PK), isbn, price, condition
books_l : id(PK), isbn, price, condition

ここにクエリがあります

SELECT 
   b.isbn, 
   a.price       AS a_price, 
   a.condition   AS a_condition, 
   l.price       AS l_price, 
   l.condition   AS l_condition 

FROM 
   books b  

   LEFT JOIN a_books a ON b.isbn  = a.isbn 
   LEFT JOIN l_books l ON b.isbn  = l.isbn

クエリの何が問題になる可能性がありますか? (各テーブルに6,000を超えるレコードがあることに注意してください)

4

4 に答える 4

3

これらの列の 1 つまたはいくつかはインデックス化されていないに違いありません。a_books.isbnbooks.isbnl_books.isbn

このステートメントを実行してみてください。

ALTER table a_books ADD INDEX IDX_abk (isbn);
ALTER table books ADD INDEX IDX_bk (isbn);
ALTER table l_books ADD INDEX IDX_lbk (isbn);

この記事を読む: データベースのインデックス作成はどのように機能しますか?

于 2012-09-27T06:00:02.090 に答える
1

問題は、isbn にインデックスがない場合に発生する可能性があります。

于 2012-09-27T05:58:56.217 に答える
1

もう 1 つの理由は、最初のテーブルを結合した後、2 番目の結合の巨大なスキャンになることです。したがって、多くの行が返されます。

于 2012-09-27T06:24:45.270 に答える
1

テーブルに 6K を超えるレコードがある場合、明らかにインデックスが原因です。

于 2012-09-27T06:06:51.330 に答える