Вычислительная эффективность — ввод-вывод

Если у меня есть два запроса, почему кажется, что второй запрос более эффективен в вычислительном отношении (только с точки зрения ввода-вывода), чем первый:

Первый запрос возвращает только восемь полей, выполняется за 1,1 секунды и обрабатывает 115,6 МБ. Второй, однако, возвращает более миллиона записей, но выполняется всего за 3,4 секунды и имеет доступ только к 8,2 МБ.

Я действительно пытаюсь понять, как писать запросы более эффективно, поскольку я начинаю использовать значительно большие пулы данных. Спасибо!

SELECT
  *
FROM
  `table1`
LIMIT
  10;
SELECT
  id
FROM
  `table1`
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

BigQuery — это в основном столбцовая база данных (это не совсем так, но это полезное приближение). То есть он хранит каждый столбец отдельно. Таким образом, для доступа к одному столбцу требуется только найти и прочитать этот один столбец. Для доступа к нескольким столбцам требуется найти все эти столбцы и прочитать их, даже если вам нужно только одно значение.

Это не только функция производительности. Количество столбцов также определяет биллинг. Для пользователей других баз данных может быть действительно удивительно, когда:

select t.*
from t
limit 10;

в конечном итоге стоит 10 или 100 долларов, потому что t действительно большой и широкий. Но:

select count(id)
from t;

почти ничего не стоит.

Еще одно замечание: когда вы несколько раз ссылаетесь на таблицу в запросе, вы платите за доступ только один раз. Таким образом, самообъединения не дороже, чем выбор непосредственно из таблицы.

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