У меня возникли проблемы с оптимизацией запроса mySQL, для которого я использовал подзапросы, чтобы попытаться получить предыдущий и следующий идентификаторы на основе идентификатора в запросе. Когда я использую функцию EXPLAIN
в mySQL, это показывает, что один из моих подзапросов проходит через 690k + строк, что, как я предполагаю, влияет на производительность.
Я пытался ограничить подзапросы, чтобы они возвращали только один результат, и использовал MIN
и MAX
в подзапросах, но оба этих параметра по-прежнему возвращали большие наборы строк.
SELECT c.*,
(SELECT id FROM cards WHERE id > '733290' ORDER BY id ASC LIMIT 1) AS 'prev',
(SELECT id FROM cards WHERE id < '733290' ORDER BY id DESC LIMIT 1) AS 'next'
FROM cards c
LEFT JOIN albums a ON (a.id = cs.album_id)
WHERE c.id = '733290'
В объяснении таковы были результаты:
id
select_type
table
type
possible_keys
key
key_len
ref
rows
Extra
5
SUBQUERY
cards
range
PRIMARY,user_id
PRIMARY
4
NULL
696177
Using where
4
SUBQUERY
cards
range
PRIMARY,user_id
PRIMARY
4
NULL
4
Using where
Редактировать: Вот определения для таблицы карт:
Keyname Type Unique Packed Column Cardinality Collation Null Comment
PRIMARY BTREE Yes No id 696183 A No
user_id BTREE No No user_id 5438 A No
album BTREE No No album 258 A No