Я изучал индексы и не могу полностью понять, как MYSQL вообще может использовать индексы для операторов типа
IN() AND IN() ... AND IN()
Книга, которую я читаю, предполагает, что когда у нас есть индекс (a
, b
, ...), но пользователь хочет найти b
, и у нас низкая мощность в a
, мы можем используйте трюк и просто добавьте IN ()
WHERE a IN ('x1', 'x2', ... 'all possible values go here') AND `b`>123
Допустим, у нас есть следующие данные
x1 1
x1 4
x1 456
x2 5
x3 1
x3 2
x3 3
x4 1234
Как оно может пройти по этому дереву, чтобы удовлетворить запрос выше? Будет ли он просто создавать все возможные комбинации для IN-ов и будет в значительной степени обходить дерево для каждого из этих запросов?
WHERE `a`='x1' AND `b`>123
WHERE `a`='x2' AND `b`>123
...
поэтому делает этот трюк ограниченной полезности, потому что с увеличением числа IN-s количество всех возможных комбинаций IN резко возрастает, и нам придется пробежаться по B-дереву для каждой из этих комбинаций? Если вышеприведенное верно, означает ли это, что есть некоторая теоретическая точка, в которой обман с индексом IN будет выполняться медленнее, чем без использования индекса?