powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не задействуется индекс в подзапросе
13 сообщений из 13, страница 1 из 1
Не задействуется индекс в подзапросе
    #38589591
e_moon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,

Прошу помочь разобраться! Не могу понять почему не спользуется primary-индекс в основном запросе. Задача - выбрать по одной последней записи с фоткой для каждого пользователя (таковых всего 10, но перебирает все 1489):


Код: sql
1.
2.
3.
EXPLAIN SELECT * FROM as_data WHERE `id` IN (
SELECT max(`id`) FROM as_data WHERE `photos` LIKE "%jpg%" GROUP BY `user_id` ORDER BY max(`id`)
) ORDER BY `id` DESC



1) PRIMARY as_data ALL NULL 1489 NULL Using where; Using filesort
2) DEPENDENT SUBQUERY as_data index user_id 4 NULL 10 Using where; Using filesort
...
Рейтинг: 0 / 0
Не задействуется индекс в подзапросе
    #38589593
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия MySQL какая?

Скорее всего до 5.6. А если так, то переписывайте констуркцию IN (SELECT ...) через JOIN.
...
Рейтинг: 0 / 0
Не задействуется индекс в подзапросе
    #38589606
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кажись вот это не дает индексу работать
Код: sql
1.
LIKE "%jpg%"
...
Рейтинг: 0 / 0
Не задействуется индекс в подзапросе
    #38589607
e_moon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftВерсия MySQL какая?

Скорее всего до 5.6. А если так, то переписывайте констуркцию IN (SELECT ...) через JOIN.

Версия программы: 5.5.25 - MySQL Community Server (GPL)

Ок, попробую покапаться...
...
Рейтинг: 0 / 0
Не задействуется индекс в подзапросе
    #38589608
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
e_moon,
странный запрос, а что надо, может все намного проще?
...
Рейтинг: 0 / 0
Не задействуется индекс в подзапросе
    #38589622
e_moon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkovкажись вот это не дает индексу работать
Код: sql
1.
LIKE "%jpg%"



Нет, не повлияло. В самом подзапросе индекс (user_id) используется.

Бред какой-то, но забавно... Добавил LIMIT:
Код: sql
1.
SELECT * FROM as_data WHERE `id` IN (SELECT max(`id`) FROM as_data WHERE `photos` LIKE "%jpg%" GROUP BY `user_id`) ORDER BY `id` DESC LIMIT 0,10



EXPLAINE пишет теперь - все ок, используется индекс PRIMARY. Но сам запрос (не EXPLAIN, а выборка) происходит за 38 сек.
...
Рейтинг: 0 / 0
Не задействуется индекс в подзапросе
    #38589624
e_moon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkove_moon,
странный запрос, а что надо, может все намного проще?

Задача - выбрать по одной последней записи с фоткой для каждого пользователя.

Т.е.:

Вася, последняя запись с фото была 17.03.2014
Петя, последняя запись с фото была 16.03.2014
...
...
Рейтинг: 0 / 0
Не задействуется индекс в подзапросе
    #38589640
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
SELECT * 
FROM (SELECT max(`id`) id FROM as_data WHERE `photos` LIKE "%jpg%" GROUP BY `user_id`) AS r
JOIN as_data AS a ON r.id=a.id
ORDER BY r.`id`
...
Рейтинг: 0 / 0
Не задействуется индекс в подзапросе
    #38589642
e_moon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал составить JOIN - индексы в пролете... Короче, не могу сообразить. Не подкините какой-нибудь пример?

SELECT * FROM as_data WHERE id IN (
SELECT MAX(id)
FROM as_data
INNER JOIN (
SELECT MAX(pubdate) AS maxdate, user_id
FROM as_data
GROUP BY user_id
) AS ms ON as_data.pubdate=ms.maxdate AND as_data.user_id=ms.user_id
GROUP BY as_data.user_id
)
...
Рейтинг: 0 / 0
Не задействуется индекс в подзапросе
    #38589653
e_moon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,

спасибо, работает и быстро! Хотя и обходит все-равно все 1489 записи. Вот какой EXPLAIN:

1) PRIMARY <derived2> ALL NULL NULL NULL NULL 9 Using filesort
1) PRIMARY a eq_ref PRIMARY PRIMARY 4 r.id 1
2) DERIVED as_data ALL NULL NULL NULL NULL 1489 Using where; Using temporary; Using filesort
...
Рейтинг: 0 / 0
Не задействуется индекс в подзапросе
    #38589663
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
e_moon,
так он и должен все записи обойти,
LIKE "%jpg%" убирай и индекс (user_id,id) поставь
...
Рейтинг: 0 / 0
Не задействуется индекс в подзапросе
    #38589671
e_moon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,

ок, спасибо вам большое! Все понял!
...
Рейтинг: 0 / 0
Не задействуется индекс в подзапросе
    #38590811
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
e_moon,

можно еще через NOT EXISTS попробовать, что-то вроде
Код: sql
1.
2.
3.
4.
5.
6.
SELECT a.* 
FROM as_data a
WHERE 1 = 1
   AND NOT EXISTS(SELECT b.* FROM as_data b WHERE b.`user_id` = a.`user_id` AND b.id > a.id)
   AND a.`photos` LIKE "%jpg%"
ORDER BY a.`id`
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не задействуется индекс в подзапросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]