Будет ли MySQL переупорядочен там, где условие основано на порядке индекса в нескольких столбцах? - PullRequest
0 голосов
/ 11 января 2019

например, индекс (column1,column2). Предположим, что мы выполняем запрос select * from some_table where column2 > 3 and column1<2, будет ли MySQL достаточно умен, чтобы переупорядочить запрос до select * from some_table where column1<2 and column2 > 3, а затем использовать индекс (column1,column2)?

1 Ответ

0 голосов
/ 11 января 2019

Да, оптимизатор MySQL может сказать, что логическое AND является алгебраически коммутативным, то есть A AND B логически совпадает с B AND A.

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

Однако, в случае, если вы показываете, условие на column1 является условием диапазона, поэтому MySQL не может использовать индекс для поиска во втором столбце. Значения в column2 сортируются по значению column1, поэтому они практически не расположены. Поиск строк, где column2 > 3 должен был бы искать все подмножества строк, которые в любом случае совпадают с первым термином, и к этому времени механизм хранения будет считывать эти строки в память, поэтому использование индекса незначительно.

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