Использует ли sql несколько индексов столбцов? (MySQL) - PullRequest
0 голосов
/ 14 июля 2020
CREATE TABLE test (
    id         INT NOT NULL,
    last_name  CHAR(30) NOT NULL,
    first_name CHAR(30) NOT NULL,
    PRIMARY KEY (id),
    INDEX name (last_name,first_name)
);

1. SELECT * FROM test WHERE last_name='bob' and first_name='John';

2. SELECT * FROM test WHERE first_name='John' and last_name='bob';

Первый sql должен использовать индекс, а второй использовать индекс? а почему?

1 Ответ

1 голос
/ 14 июля 2020

Оба могут использовать индекс, если оптимизатору это "нравится". По какой-то причине он мог бы этого не делать, но порядок операндов AND не должен быть такой причиной - на самом деле, я бы считал это ошибкой, если бы это было так.

Так как AND коммутирует, нет разницы, будет ли условие на first_name первым или вторым в операции AND (и аналогом last_name).

Вы можете попробовать сами. Просто сравните планы. Скорее всего, они идентичны.

И помните, SQL - это язык описания. Вы не говорите системе, что делать, а говорите, что хотите. Он сам разберется, как это сделать и как это сделать быстро. Таким образом, можно свободно переделывать запросы, особенно с такими мелочами, как изменение порядка операндов, когда это возможно.

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