Я не могу выполнить эффективный запрос к таблице. Я не знаю, как узнать, что является первичным ключом, другими ключами и индексами, определенными для таблицы. Как найти индексы, определенные в таблице data-to-insights.ecommerce.web_analytics
?
Я пытаюсь выполнить запрос, подобный приведенному ниже, который должен получить только одну запись, чтобы найти конкретные примеры данных, с которыми можно поиграть, и в то же время быть эффективными. Всегда говорится об увеличении максимального байта как минимум до 30 МБ или около того. Но согласно предыдущему результату запроса, для которого я увеличил до 30 МБ, результат должен быть одной строкой. Может ли один ряд быть таким большим? Он пытается сканировать всю таблицу? Как узнать индексы?
Я выполнил это:
SELECT
COUNT(*),
wa.date,
fullVisitorId
FROM
`data-to-insights.ecommerce.web_analytics` AS wa
WHERE
wa.date='20161128'
GROUP BY
wa.date,
fullVisitorId
LIMIT
100
Я получаю таблицу результатов с парами date + visitorId и count (*) = 1 для каждой пары. Затем я выполняю это:
SELECT
COUNT(*),
wa.date,
fullVisitorId
FROM
`data-to-insights.ecommerce.web_analytics` AS wa
WHERE
wa.date='20161128'
AND wa.fullVisitorId='5244450947123722944'
GROUP BY
wa.date,
fullVisitorId
LIMIT
100
В моем понимании это должно получить только одну строку из таблицы, и она должна (это я не уверен) перейти прямо к ней через индекс, такой как PK. Возможно, некоторые из этих рассуждений / предположений неверны, поскольку при добавлении критериев WHERE сканируемые или извлекаемые данные должны уменьшаться, а не увеличиваться.
В нем говорится, что нужно будет потреблять 30 МБ, что, кажется, много для того, что я думаю, это ряд или несколько. И действительно, когда я допустил 30 МБ, я увидел, что count (*) равен 1 для конкретной комбинации date и fullVisitorId. Но затем, когда я отфильтровал по определенной дате и visitorId, снова говорится, что мне нужно позволить ему потратить 30 МБ. С чего бы это? Это больше, чем один ряд? Один ряд такой большой? Почему это количество в МБ не уменьшается при добавлении условий (где оговорки), а иногда даже увеличивается, даже если оно должно извлекать меньше данных.
This query will process 28.6 MB when run.