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

mysql> SELECT * FROM v4_rating WHERE id IN (1, 2, 3) ;
Empty set (0.00 sec)

mysql> SELECT * FROM v4_rating WHERE id IN ( SELECT id FROM v4_rating WHERE id IN (1, 2, 3) );
Empty set (1.40 sec)

mysql> EXPLAIN SELECT * FROM v4_rating WHERE id IN (1, 2, 3);
+----+-------------+-----------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+-------+---------------+---------+---------+------+------+-------------+
| 1 | SIMPLE | v4_rating | range | PRIMARY | PRIMARY | 4 | NULL | 3 | Using where |
+----+-------------+-----------+-------+---------------+---------+---------+------+------+-------------+
1 row in set (0.00 sec)

mysql> EXPLAIN SELECT * FROM v4_rating WHERE id IN (SELECT id FROM v4_rating WHERE id IN (1, 2, 3));
+----+--------------------+-----------+-----------------+---------------+---------+---------+------+--------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-----------+-----------------+---------------+---------+---------+------+--------+--------------------------+
| 1 | PRIMARY | v4_rating | ALL | NULL | NULL | NULL | NULL | 830213 | Using where |
| 2 | DEPENDENT SUBQUERY | v4_rating | unique_subquery | PRIMARY | PRIMARY | 4 | func | 1 | Using index; Using where |
+----+--------------------+-----------+-----------------+---------------+---------+---------+------+--------+--------------------------+
2 rows in set (0.00 sec)

Спасибо за помощь.
...
Рейтинг: 0 / 0
Не работает индекс при можествах - IN
    #38360207
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если версия MySQL до 5.6 (невключительно), то так и должно быть. Это уже древний баян, заключающийся в том, что оптимизатор MySQL не понимает, что подзапрос в IN (SELECT ...) является независимым.

Вот результаты на версии 5.6.* было бы интересно посмотреть.
...
Рейтинг: 0 / 0
Не работает индекс при можествах - IN
    #38360208
Boks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, будем обновляться.
Спасибо, за подсказку.

авторmysql --version
mysql Ver 14.14 Distrib 5.1.67, for redhat-linux-gnu (x86_64) using readline 5.1
...
Рейтинг: 0 / 0
Не работает индекс при можествах - IN
    #38360226
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftЕсли версия MySQL до 5.6 (невключительно), то так и должно быть. Это уже древний баян, заключающийся в том, что оптимизатор MySQL не понимает, что подзапрос в IN (SELECT ...) является независимым.

Вот результаты на версии 5.6.* было бы интересно посмотреть.

Дело может быть и не в этом, а тупо в статистике.
...
Рейтинг: 0 / 0
Не работает индекс при можествах - IN
    #38360228
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме того, надо бы видеть таблицы...
...
Рейтинг: 0 / 0
Не работает индекс при можествах - IN
    #38360229
Boks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДело может быть и не в этом, а тупо в статистике.
А можно поподробнее?

Да, при принудительном указании индекса ситуация не меняется:
авторmysql> SELECT * FROM v4_rating USE INDEX (PRIMARY) WHERE id IN (SELECT id FROM v4_rating WHERE id IN (1, 2, 3));
Empty set (1.42 sec)

mysql> SELECT * FROM v4_rating USE KEY (PRIMARY) WHERE id IN (SELECT id FROM v4_rating WHERE id IN (1, 2, 3));
Empty set (1.46 sec)
...
Рейтинг: 0 / 0
Не работает индекс при можествах - IN
    #38360233
Boks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что это не принципиально, т.к. в выборку участвует одна таблица и одно поле - id, но все-же:

авторmysql> DESCRIBE v4_rating;
+--------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| from_unit_id | int(11) | NO | MUL | NULL | |
| photo_id | int(11) | NO | MUL | NULL | |
| rating | int(11) | NO | | NULL | |
+--------------+---------+------+-----+---------+----------------+
4 rows in set (0.00 sec)


авторmysql> SELECT count(*) FROM v4_rating;
+----------+
| count(*) |
+----------+
| 831407 |
+----------+
1 row in set (0.00 sec)
...
Рейтинг: 0 / 0
Не работает индекс при можествах - IN
    #38360251
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftЕсли версия MySQL до 5.6 (невключительно), то так и должно быть. Это уже древний баян, заключающийся в том, что оптимизатор MySQL не понимает, что подзапрос в IN (SELECT ...) является независимым.

Вот результаты на версии 5.6.* было бы интересно посмотреть.Так за чем дело стало? sqlfiddle.com/#!9/8f188/1 :)
...
Рейтинг: 0 / 0
Не работает индекс при можествах - IN
    #38360256
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007miksoftВот результаты на версии 5.6.* было бы интересно посмотреть.Так за чем дело стало? sqlfiddle.com/#!9/8f188/1 :)Да что-то не привык я этим сервисом пользоваться...
Вроде выглядит как починили, это радует.
...
Рейтинг: 0 / 0
Не работает индекс при можествах - IN
    #38360262
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivmiksoftЕсли версия MySQL до 5.6 (невключительно), то так и должно быть. Это уже древний баян, заключающийся в том, что оптимизатор MySQL не понимает, что подзапрос в IN (SELECT ...) является независимым.

Вот результаты на версии 5.6.* было бы интересно посмотреть.Дело может быть и не в этом, а тупо в статистике.А причем тут статистика, если в плане слова "DEPENDENT SUBQUERY" ?
...
Рейтинг: 0 / 0
Не работает индекс при можествах - IN
    #38360288
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftCygapb-007пропущено...
Так за чем дело стало? sqlfiddle.com/#!9/8f188/1 :)Да что-то не привык я этим сервисом пользоваться...
Вроде выглядит как починили, это радует.А вот у меня другой возможности пощупать MySQL – нету:)
А уж с планшетки – и не будет, наверное…
...
Рейтинг: 0 / 0
Не работает индекс при можествах - IN
    #38360301
Boks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кому интересно:

В оригинале запрос выглядел так:
DELETE FROM v4_rating WHERE photo_id IN (SELECT id FROM `v4_photos` WHERE account_id=?)

т.е. удаление по свойству из множества, непроходимым этапом в этом запросе было именно множество, поэтому для наглядности я сократил запрос и написал его в топике.

Проблему удалось решить и запрос сейчас выгладит так:
Код: sql
1.
2.
3.
delete from v4_rating
using v4_rating join v4_photos on v4_rating.photo_id=v4_photos.id
where v4_photos.account_id=?



Спасибо всем за участие.
...
Рейтинг: 0 / 0
Не работает индекс при можествах - IN
    #38360312
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Boks,

что за using?

все немного проще
Код: sql
1.
2.
3.
4.
delete r
from v4_rating r 
join v4_photos p on r.photo_id=p.id 
where p.account_id=?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не работает индекс при можествах - IN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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