У меня настроен сценарий новостей, поэтому он отобразит последние 5 сообщений (из той же категории, что и просматриваемый в данный момент пост, за исключением просматриваемого в данный момент сообщения).Лучший способ получить последние 5 сообщений из категории?
My 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 результатов?
EDIT
Результаты с индексом Категория:
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)
Как использовать этот индекс в «порядке по» статье? –
Оптимизатор запросов будет использовать индекс самостоятельно, вам не нужно указывать что-либо. –
Оптимизатор запросов по-прежнему выбирает индекс категории для чего-либо еще. Когда я делаю «FORCE INDEX» (в качестве теста), теперь требуется сканировать более 300 строк с использованием нового индекса. –