0

次の3つのテーブルがあります。

出版物(主キー = article )

article | title | pubType 

著者(主キー = *著者名*)

author_name | author_somethingelse

pub_author_map

article | author_name 

の値を指定するとpubType、著者を含む記事に関する情報を選択する必要があります。これを行うために、私は持っています

SELECT p.article, p.title, p.dateTime, pam.author_name FROM publications p 
LEFT JOIN pub_author_map pam ON pam.article = p.article
LEFT JOIN authors a ON a.author_name = pam.author_name
WHERE p.pubType = '$pubType' ORDER BY p.article LIMIT 10

を使用してもLIMIT 10、このクエリは約 29 秒で記録されました。には 1500 行、publicationsには 3000 行ありpub_author_mapます。

上記のクエリを最適化するにはどうすればよいですか?

4

3 に答える 3

1

INNER JOIN で正しい結果が得られる場合は、それを使用してください。LEFT JOIN は、提供される結果が必要な場合にのみ使用してください。

著者のいない記事を見たいと思ったことはありませんか?

于 2012-08-08T16:53:13.813 に答える
1

インデックスを使用してテーブルを最適化できます。たとえば、データを取得するときに外部キーとして使用されるインデックス列: インデックス作成の優れたチュートリアルです。http://www.tizag.com/mysqlTutorial/mysql-index.phpインデックスはより多くのディスク領域を必要としますが、比較的多くのデータベースに対してクエリを実行する場合、時間を節約できます。中のデータ。

于 2012-08-08T16:51:14.753 に答える
1

インデックスを追加

  • 列 article の pub_author_map

  • 列 pubType の出版物

たとえばこのように。

CREATE INDEX pub_author_idx_1 
    ON pub_author_map (article);

CREATE INDEX publications_idx_1
    ON publications (pubType);
于 2012-08-08T16:52:11.947 に答える