1

EXPLAIN 関数を教えてくれた MrCleanX に感謝します。(ここでより良い言い回しのために他の質問を削除しました)...クエリにORDER BY句を追加すると、基本的に「検査された行」が大幅に増加します。

テーブル:

packages と package_to_tag の両方が MyISAM を実行しています

次のように構成されています。

パッケージ の日付は索引付けされています

+----------------+------------------+----------------+
|   aid(primary) |     source       |   date(index)  |
+----------------+------------------+----------------+
|   1            |    CA            |   2013-04-05   |
+----------------+------------------+----------------+
|   2            |    FL            |   2013-05-05   |
+----------------+------------------+----------------+
|   3            |    UT            |   2012-06-13   |
+----------------+------------------+----------------+
|   4            |    VT            |   2011-04-29   |
+----------------+------------------+----------------+
|   5            |    CT            |   2013-04-10   |
+----------------+------------------+----------------+

package_to_tag package-tag の一意のインデックスであり、package_aid とタグの両方にインデックスがあります

+---------------+------------------+
|  package_aid  |     tag          |
+---------------+------------------+
|   2           |    sports        |
+---------------+------------------+
|   2           |    nba           |
+---------------+------------------+
|   1           |    food          |
+---------------+------------------+
|   1           |    burrito       |
+---------------+------------------+
|   4           |    hockey        |
+---------------+------------------+
|   4           |    sports        |
+---------------+------------------+
|   3           |    news          |
+---------------+------------------+
|   5           |    sports        |
+---------------+------------------+
|   5           |    nba           |
+---------------+------------------+

私の基本的なクエリは次のとおりです。

SELECT package_aid, source 
FROM package_to_tag
RIGHT JOIN packages ON packages.aid = package_to_tag.package_aid
WHERE tag IN("sports","nba")
GROUP BY package_aid
HAVING COUNT(*) = 2
ORDER BY date DESC
LIMIT 500;

「説明」すると、package_to_tag テーブル (1.5 ミル付近) のすべてのレコードを調べていることがわかります。

ただし、ORDER BY 句を削除すると、これははるかに扱いやすい 30k に削減されます。

完全な結果のスクリーン キャップ。

パッケージ: パッケージ

package_to_tag: package_to_tag

ORDER BY で説明します。 ORDER BYで説明する

ORDER BY なしで説明: EXPLAIN no/ORDER BY

package_to_tag のインデックス:
package_to_tag の説明

package_to_tag テーブルのすべての行を含めずにソートを維持するにはどうすればよいですか?

4

0 に答える 0