Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Cosmos DB sekarang menampilkan Query Advisor, yang dirancang untuk membantu Anda menulis kueri yang lebih cepat dan lebih efisien menggunakan bahasa kueri Cosmos DB. Baik Anda mengoptimalkan performa, biaya, atau skalabilitas, Query Advisor memberikan rekomendasi yang dapat ditindaklanjuti untuk membantu Anda memaksimalkan data Anda di Azure dan Microsoft Fabric.
Mengapa pengoptimalan kueri penting
Bahasa kueri untuk Cosmos DB (di Azure dan Fabric) fleksibel, memungkinkan pengembang untuk mengkueri data JSON dengan sintaks seperti SQL yang sudah dikenal. Ketika aplikasi tumbuh dalam kompleksitas, perbedaan kecil dalam struktur kueri dapat memiliki efek yang signifikan pada performa dan unit permintaan (RU), terutama dalam skala besar.
Misalnya, dua kueri yang mengembalikan hasil yang sama dapat berbeda secara dramatis dalam efisiensi berdasarkan bagaimana predikat ditulis dan bagaimana indeks diterapkan.
Query Advisor menganalisis kueri Anda dan menawarkan rekomendasi yang ditargetkan untuk membantu Anda:
- Kurangi biaya RU dengan mengidentifikasi ekspresi yang tidak efisien atau filter yang tidak perlu.
- Meningkatkan performa kueri melalui struktur kueri yang lebih optimal.
- Pahami "mengapa" di balik setiap saran, dengan penjelasan yang ditulis dalam bahasa yang jelas dan ramah pengembang.
Cara kerjanya
Saat Anda menjalankan kueri, Query Advisor menjalankan rencana kueri Anda, mengevaluasi pola yang dapat menyebabkan konsumsi RU tinggi, pemindaian berlebihan, atau pemrosesan yang berpotensi tidak perlu. Kemudian mengembalikan serangkaian rekomendasi yang menunjukkan bagian mana dari kueri yang dapat membatasi performa, dan menyarankan potensi perubahan yang dapat membantu.
Menggunakan Query Advisor
Anda dapat mengaktifkan kemampuan Query Advisor dengan mengatur properti ke PopulateQueryAdviceQueryRequestOptionstrue. Ketika tidak ditentukan, PopulateQueryAdvice default ke false. Untuk mengakses saran, gunakan properti FeedResponse.QueryAdvicestring .
Penting
Query Advisor hanya berfungsi dengan .NET SDK untuk Cosmos DB. Saran kueri juga hanya dikembalikan pada perjalanan pulang pergi pertama. Saran tidak tersedia pada panggilan kelanjutan berikutnya.
Pertimbangkan kueri contoh ini:
SELECT VALUE
r.id
FROM
root r
WHERE
CONTAINS(r.name, 'Abc')
Berikut adalah contoh permintaan SDK yang melakukan kueri ini dan menggunakan Query Advisor:
using Microsoft.Azure.Cosmos;
CosmosClient client = new("<connection-string>");
Container container = client.GetContainer("<database-name>", "<container-name>");
string query = """
SELECT VALUE
r.id
FROM
root r
WHERE
CONTAINS(r.name, 'Abc')
""";
QueryRequestOptions requestOptions = new()
{
PopulateQueryAdvice = true
};
using FeedIterator<dynamic> itemQuery = container.GetItemQueryIterator<dynamic>(
query,
requestOptions: requestOptions);
string? queryAdvice = null;
while (itemQuery.HasMoreResults)
{
if (queryAdvice is not null)
{
break;
}
FeedResponse<dynamic> page = await itemQuery.ReadNextAsync();
queryAdvice = page.QueryAdvice;
}
Console.WriteLine(queryAdvice);
Permintaan ini mengembalikan satu pernyataan saran untuk QA1002:
QA1002: If you are matching on a string prefix, consider using STARTSWITH. [...]
Saran kueri berisi tiga informasi penting:
-
ID Saran Kueri:
QA1002 -
Deskripsi saran: DALAM contoh ini,
If you are matching on a string prefix, consider using STARTSWITH. - Tautan ke dokumentasi: URL ke panduan terperinci
Nota
Tautan ke dokumentasi dihilangkan dari contoh ini.
Examples
Pertimbangkan contoh skenario berikut di mana Anda bisa menggunakan Query Advisor.
Mengoptimalkan penggunaan fungsi sistem
Pertimbangkan contoh ini di GetCurrentTimestamp mana fungsi digunakan:
SELECT
GetCurrentTicks()
FROM
container c
WHERE
GetCurrentTimestamp() > 10
Dalam contoh ini, ada dua saran yang dikembalikan oleh Query Advisor: QA1008 dan QA1009. Setiap saran dipisahkan menjadi baris baru dalam output string.
QA1009: Consider using GetCurrentTimestampStatic instead of GetCurrentTimestamp in the WHERE clause. [...]
QA1008: Consider using GetCurrentTicksStatic instead of GetCurrentTicks in the WHERE clause. [...]
Dengan menggunakan saran ini, Anda dapat menulis ulang kueri ke alternatif berikut:
SELECT
GetCurrentTicksStatic()
FROM
container c
WHERE
GetCurrentTimestampStatic() > 10