ニュース スクリプトをセットアップして、最新の 5 件の投稿 (現在表示されている投稿と同じカテゴリから - 現在表示されている投稿を除く) を表示するようにしました。
私のSQLは次のようになります:
SELECT title, sid, url, category
FROM news
WHERE category = ? AND sid <> ? ORDER BY sid DESC LIMIT 5
クエリの EXPLAIN は次のとおりです。
+----+-------------+----------+------+------------------+----------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+------------------+----------+---------+-------+------+-------------+
| 1 | SIMPLE | news | ref | PRIMARY,category | category | 98 | const | 154 | Using where |
+----+-------------+----------+------+------------------+----------+---------+-------+------+-------------+
1 row in set (0.00 sec)
私が疑問に思っているのは、5 つの結果を取得するために非常に多くの行をスキャンする必要がないように、クエリを最適化する方法はありますか?
編集
カテゴリ インデックスの結果:
mysql> EXPLAIN EXTENDED SELECT title, sid, url, category FROM news WHERE category = ? AND sid <> ? ORDER BY sid DESC LIMIT 5\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: news
type: ref
possible_keys: PRIMARY,category
key: category
key_len: 98
ref: const
rows: 156
filtered: 100.00
Extra: Using where
1 row in set, 1 warning (0.00 sec)
カテゴリ インデックスなしの結果:
mysql> EXPLAIN EXTENDED SELECT title, sid, url, category FROM news WHERE category = ? AND sid <> ? ORDER BY sid DESC LIMIT 5\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: news
type: index
possible_keys: PRIMARY
key: PRIMARY
key_len: 2
ref: NULL
rows: 5
filtered: 7420.00
Extra: Using where
1 row in set, 1 warning (0.00 sec)