Представьте, что ключ представлен кортежем Python (col1, col2, col3) ... операция индексации включает сравнение tuple_a
с tuple_b
... если вы не знаете, какое значение col1 и col2, который вас интересует, но только col3, тогда он должен будет прочитать весь индекс («полное сканирование индекса»), что не так эффективно.
Если у вас есть индекс (col1, col2, col3), то вы можете ожидать, что любая СУБД будет использовать этот индекс (прямым образом), когда предложение WHERE содержит ссылку на (1) все 3 столбца (2) и col1, и col2 (3) только col1.
В противном случае (например, только col3 в предложении WHERE) либо СУБД вообще не будет использовать этот индекс (например, SQLite), либо выполнит полное сканирование индекса (например, Oracle) [если другой индекс не лучше].
В вашем конкретном примере, предполагая, что id является уникальным идентификатором клиента, бессмысленно указывать его в индексе (кроме индекса, который ваша СУБД должна установить для первичного ключа или столбца, отмеченного как UNIQUE) .