почему объясняется шоу «Использование условия индекса»? - PullRequest
0 голосов
/ 11 июня 2019

Я учусь, используя условие индекса в mariadb

Это для Centos7 и работает Mariadb 10.2

это мой SQL.

создать индекс

create index ixnn_product__updated_at
    on product (updated_at);

объяснение

explain extended
select * from product
where updated_at BETWEEN '2018-06-10 00:00:00' AND '2019-06-10 23:59:59'

результат

          id: 1
  select_type: SIMPLE
        table: product
         type: range
possible_keys: ixnn_product__updated_at
          key: ixnn_product__updated_at
      key_len: 5
          ref: NULL
         rows: 2431232
     filtered: 100.00
        Extra: Using index condition

Я ожидал использовать индекс в дополнительном, но я видел Использование условия индекса

Итак, я добавил тест.

объяснить

explain extended 
select updated_at from product
 where updated_at BETWEEN '2018-06-10 00:00:00' AND '2019-06-10 23:59:59' 

результат

          id: 1
  select_type: SIMPLE
        table: product
         type: range
possible_keys: ixnn_product__updated_at
          key: ixnn_product__updated_at
      key_len: 5
          ref: NULL
         rows: 2431232
     filtered: 100.00
        Extra: Using where; Using index

Почему это происходит?

1 Ответ

1 голос
/ 11 июня 2019

Using index condition и Using index являются несвязанными оптимизациями.(К сожалению, имена так близки.)

Using index condition можно исследовать через другие имена: ICP или Index Condition Pushdown.Это ускорение по сравнению с предыдущим, когда Engine (например, InnoDB) будет передавать строку обратно в «Обработчик».С ICP Engine выполняет тестирование (против updated_at в вашем случае).

Using index означает, что индекс «покрывает».Это означает, что все столбцы, необходимые из таблицы, существуют в используемом индексе.И это означает, что запрос может быть выполнен полностью в BTree индекса, без необходимости обращаться к Btree данных.Вашему первому SELECT нужны все столбцы (*);вашему второму нужно только updated_at, поэтому оно «покрывает».

(ICP был добавлен в MariaDB в 5.3; в Mysql в 5.6.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...