Влияние производительности таблицы соединения таблиц на тип данных столбца - PullRequest
0 голосов
/ 10 октября 2019

Я хочу убедиться, что я не окажу негативного влияния на производительность запросов, основываясь на дизайне схемы для BigQuery. У меня есть две таблицы, которые мне нужно выполнить соединение. Столбец, который я буду использовать для объединения таблиц, может иметь тип INTEGER или STRING. STRING было бы проще в моем случае, так как не требовалось бы никакой новой проверки в нашей базе кода, чтобы гарантировать, что все значения имеют тип INTEGER. Но я не хочу объединяться по типу STRING, если производительность запроса будет значительно хуже, чем при выполнении объединения по столбцу типа INTEGER.

Существует ли большая разница в производительности в BigQuery, когда соединение имеет типSTRING против типа INTEGER?

--- Обновление 10/16 ---

Я провел некоторый базовый анализ, чтобы проверить это, вот результаты:

Использование общедоступного набора данныхтаблица пользователей содержит 10 миллионов строк, а таблица сообщений содержит 31 миллион строк

Присоединение к целому числу: 2.78 sec elapsed, 318.1 MB processed (avg over 10 runs)

Присоединение к строке 6.77 sec elapsed, 137 MB processed (avg over 10 runs)

- присоединение к целочисленному запросу

SELECT count(*)
FROM `bigquery-public-data.stackoverflow.users` u
JOIN `bigquery-public-data.stackoverflow.stackoverflow_posts` p
  on u.id = p.owner_user_id
WHERE RAND() < 2

(где добавлен пункт, чтобы избежать кеша)

- объединить по строке

SELECT count(*)
FROM 'bigquery-public-data.stackoverflow.users' u
JOIN 'bigquery-public-data.stackoverflow.stackoverflow_posts' p
  on u.display_name = p.owner_display_name
WHERE RAND() < 2

(где добавлен пункт, чтобы избежать кеша)


Удивительно, но JOIN на STRING работает хуже, чем INTEGER.

1 Ответ

4 голосов
/ 10 октября 2019

Нет, вы не увидите никакой существенной разницы. Придерживайтесь схемы, более естественной для вашего варианта использования.

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