Выполнение запроса с использованием AND в таблице Azure выполняется очень медленно

Если я попробую это:

( RowKey ge '1606780800000' )

Я получаю результаты обратно в одну секунду.

Но если я попробую с AND, все еще используя RowKey следующим образом:

( RowKey ge '1606780800000' and RowKey le '1606784400000' )

Постоянно загружается.

Я знаю, что с ИЛИ он выполнит полное сканирование, но так ли это в случае с AND? Есть ли способ обойти это?

сколько результатов должно быть возвращено? Что касается «Он загружается вечно», вы имеете в виду, что результаты не возвращаются?

Ivan Glasenberg 25.12.2020 02:50

@IvanYang Я имею в виду, что он продолжает ждать результатов, но, поскольку данных для сканирования слишком много, они остаются там «навсегда». Через полчаса я просто сдаюсь.

rlcabral 25.12.2020 23:22
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
2
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Если просто использовать оператор 2 RowKeys with AND (без PartitionKey), он выполнит сканирование таблицы.

Вот некоторые предложения:

1. Вы можете использовать запрос диапазона, если это возможно. Затем вы можете указать фильтр, например $filter=PartitionKey eq 'xxx' and RowKey ge '1606780800000' and RowKey le '1606784400000'. Но вам нужно написать более одного запроса, если их больше, чем PartitionKeys.

2.Если вы все еще используете этот запрос: ( RowKey ge '1606780800000' and RowKey le '1606784400000' ) . В настоящее время, если requested items превышает 1000, запрос может одновременно возвращать не более 1000 элементов. Поэтому в этом случае вы должны использовать x-ms-continuation-NextPartitionKey и x-ms-continuation-NextRowKey в своем запросе. См. этот документ для более подробной информации.

Я собираюсь принять это как ответ, потому что он отвечает на мой вопрос, выполняет ли он сканирование таблицы или нет. Теперь я знаю, и это объясняет, почему это занимает так много времени. Кроме того, ваши предложения могут помочь другим. В моем конкретном случае не помогает, потому что это было бы непрактично. Мне пришлось бы выполнить запрос около 12000 раз, чтобы охватить все возможные PartitionKey. Поскольку период, который я хотел запросить, является недавним, я просто извлек все строки с определенного дня, а затем программно отбросил строки, которые мне не нужны.

rlcabral 25.12.2020 23:28

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