|
|
|
Не работает индекс при можествах - IN
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что при использовании множеств 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) Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 20:47:02 |
|
||
|
Не работает индекс при можествах - IN
|
|||
|---|---|---|---|
|
#18+
Если версия MySQL до 5.6 (невключительно), то так и должно быть. Это уже древний баян, заключающийся в том, что оптимизатор MySQL не понимает, что подзапрос в IN (SELECT ...) является независимым. Вот результаты на версии 5.6.* было бы интересно посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 20:58:27 |
|
||
|
Не работает индекс при можествах - IN
|
|||
|---|---|---|---|
|
#18+
Понятно, будем обновляться. Спасибо, за подсказку. авторmysql --version mysql Ver 14.14 Distrib 5.1.67, for redhat-linux-gnu (x86_64) using readline 5.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 21:01:05 |
|
||
|
Не работает индекс при можествах - IN
|
|||
|---|---|---|---|
|
#18+
miksoftЕсли версия MySQL до 5.6 (невключительно), то так и должно быть. Это уже древний баян, заключающийся в том, что оптимизатор MySQL не понимает, что подзапрос в IN (SELECT ...) является независимым. Вот результаты на версии 5.6.* было бы интересно посмотреть. Дело может быть и не в этом, а тупо в статистике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 21:37:30 |
|
||
|
Не работает индекс при можествах - IN
|
|||
|---|---|---|---|
|
#18+
Кроме того, надо бы видеть таблицы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 21:39:46 |
|
||
|
Не работает индекс при можествах - IN
|
|||
|---|---|---|---|
|
#18+
авторДело может быть и не в этом, а тупо в статистике. А можно поподробнее? Да, при принудительном указании индекса ситуация не меняется: автор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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 21:41:31 |
|
||
|
Не работает индекс при можествах - IN
|
|||
|---|---|---|---|
|
#18+
Думаю, что это не принципиально, т.к. в выборку участвует одна таблица и одно поле - 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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 21:50:00 |
|
||
|
Не работает индекс при можествах - IN
|
|||
|---|---|---|---|
|
#18+
miksoftЕсли версия MySQL до 5.6 (невключительно), то так и должно быть. Это уже древний баян, заключающийся в том, что оптимизатор MySQL не понимает, что подзапрос в IN (SELECT ...) является независимым. Вот результаты на версии 5.6.* было бы интересно посмотреть.Так за чем дело стало? sqlfiddle.com/#!9/8f188/1 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 22:17:29 |
|
||
|
Не работает индекс при можествах - IN
|
|||
|---|---|---|---|
|
#18+
Cygapb-007miksoftВот результаты на версии 5.6.* было бы интересно посмотреть.Так за чем дело стало? sqlfiddle.com/#!9/8f188/1 :)Да что-то не привык я этим сервисом пользоваться... Вроде выглядит как починили, это радует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 22:24:37 |
|
||
|
Не работает индекс при можествах - IN
|
|||
|---|---|---|---|
|
#18+
MasterZivmiksoftЕсли версия MySQL до 5.6 (невключительно), то так и должно быть. Это уже древний баян, заключающийся в том, что оптимизатор MySQL не понимает, что подзапрос в IN (SELECT ...) является независимым. Вот результаты на версии 5.6.* было бы интересно посмотреть.Дело может быть и не в этом, а тупо в статистике.А причем тут статистика, если в плане слова "DEPENDENT SUBQUERY" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 22:30:47 |
|
||
|
Не работает индекс при можествах - IN
|
|||
|---|---|---|---|
|
#18+
miksoftCygapb-007пропущено... Так за чем дело стало? sqlfiddle.com/#!9/8f188/1 :)Да что-то не привык я этим сервисом пользоваться... Вроде выглядит как починили, это радует.А вот у меня другой возможности пощупать MySQL – нету:) А уж с планшетки – и не будет, наверное… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 23:12:54 |
|
||
|
Не работает индекс при можествах - IN
|
|||
|---|---|---|---|
|
#18+
Кому интересно: В оригинале запрос выглядел так: DELETE FROM v4_rating WHERE photo_id IN (SELECT id FROM `v4_photos` WHERE account_id=?) т.е. удаление по свойству из множества, непроходимым этапом в этом запросе было именно множество, поэтому для наглядности я сократил запрос и написал его в топике. Проблему удалось решить и запрос сейчас выгладит так: Код: sql 1. 2. 3. Спасибо всем за участие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 23:41:11 |
|
||
|
|

start [/forum/topic.php?fid=47&tid=1836286]: |
0ms |
get settings: |
5ms |
get forum list: |
25ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
102ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 378ms |

| 0 / 0 |
