powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как оптимизатор подбирает план
3 сообщений из 3, страница 1 из 1
Как оптимизатор подбирает план
    #40082370
samsebedba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день
есть мария 10.4
есть запрос

Код: plsql
1.
EXPLAIN SELECT * FROM table_name WHERE id IN (1,2,3,4,5,6,7,8,9) AND pole_2 IS NULL ORDER BY id DESC;



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
           id: 1
  select_type: SIMPLE
        table: table_name
         type: ref
possible_keys: PRIMARY,pole_2
          key: pole_2
      key_len: 5
          ref: const
         rows: 9
        Extra: Using where

show index при этом вот такой
Код: plaintext
1.
2.
3.
4.
5.
+------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+
| Table      | Non_unique | Key_name  | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | 
+------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+
| table_name |          0 | PRIMARY   |            1 | id          | A         |  1856244572 |     NULL | NULL   |      | BTREE      |
| table_name |          1 | pole_2    |            1 | pole_2      | A         |   309374095 |     NULL | NULL   | YES  | BTREE      |
+------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+

Судя по Cardinality должен выбираться PRIMARY, но все равно выбирается pole_2 что в плане, что по факту.
Интересно, почему так происходит . . .
Причем если в IN перечислисть до 5 значнией то все хорошо, стабильно primary
...
Рейтинг: 0 / 0
Как оптимизатор подбирает план
    #40082372
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вообще-то в InnoDB любой индекс содержит выражение первичного индекса. Так что по факту индекс по pole_2 содержит компоненту id. Насчёт вторичной сортированности по нему - ничего не скажу, надо смотреть интёрналсы.

Что же до количества - стандартные настройки оптимизатора считают, что ~10 значений в списке - это именно тот порог, когда сканирование выгоднее использования индекса. И cardinality тут емнип вообще не смотрится.

В любом случае - есть index hints.
...
Рейтинг: 0 / 0
Как оптимизатор подбирает план
    #40082470
samsebedba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас конечно используется хинт, но понять бы поведение планировщика
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как оптимизатор подбирает план
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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