Spanner — поиск по поведению составного первичного ключа

При поиске только по одному первичному ключу в составной таблице первичных ключей поведение Spanner отличается. Например, если таблица имеет ColA и ColB в качестве первичного ключа (упоминается в том же порядке при определении первичного ключа). Если вы ищете по первому ключу select * from table where ColA = 'dfdf', то он сканирует несколько строк и выдает результат намного быстрее ~ 10 мс. Но если вы ищете по второму ключу select * from table where ColB = 'dfdf', то он выполняет полное сканирование таблицы. Почему это несоответствие, если мы не ищем по полному ключу, тогда он должен выполнять полное сканирование таблицы или отдельных строк. первичные ключи индексируются, поэтому никогда не следует переходить к полному сканированию таблицы.

Составной индекс первичного ключа всегда упорядочен по ключам. т.е. если у вас есть ключи: [ColA,ColB], вы можете искать по ColA и только потом по ColB. Вы не можете использовать его для поиска только по ColB, для этого потребуется полное сканирование таблицы. Если вы хотите искать по ColB без ColA, вам следует использовать вторичный индекс.

shlomiw 30.05.2019 17:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
789
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Составной ключ - это не 2 отдельных ключа, а один ключ, объединенный из 2 частей...

Представьте себе список слов, отсортированных по алфавиту... Найти слова, первая буква которых - Н, легко... Но как найти все слова, у которых второй буква "H"...

Единственный способ — выполнить полное сканирование всех слов, если нет второго индекса слов по их второй букве, для чего и нужны вторичные индексы.

Другие вопросы по теме