Как хэшируются столбцы при сегментировании в YugabyteDB YSQL

#yugabyte-db

Вопрос:

[Вопрос, заданный пользователем в сообществе YugabyteDB Slack]

В YSQL, если моя таблица использует первичный ключ, определенный для нескольких столбцов, то каким будет ключ сегментирования в этом случае? Будут ли оба столбца использоваться для вычисления хэша? Кроме того, можем ли мы указать столбцы, которые будут использоваться в качестве ключей разделения / сегментирования, не упоминая их в первичных ключах? Что делать, если одна из таблиц не имеет первичных ключей, но должна быть разделена на один из столбцов?

Ответ №1:

По умолчанию, когда в первичном ключе настроено несколько столбцов, хэшируется первый столбец, а дополнительные столбцы упорядочиваются по возрастанию диапазона. Но у вас есть полный контроль над определением первичного ключа, что означает, что вы можете указать его любым удобным для вас способом: https://docs.yugabyte.com/latest/api/ysql/the-sql-language/statements/ddl_create_table/#primary-key

В настоящее время вы можете сегментировать только столбцы, которые находятся в ПЕРВИЧНОМ КЛЮЧЕ. Если таблица не имеет первичного ключа, неявный создается внутри, и таблица сегментируется на основе этого. Таким образом, рекомендуется всегда создавать первичный ключ.