Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Cosmos DB mostantól a Query Advisort is tartalmazza, amelynek célja, hogy gyorsabb és hatékonyabb lekérdezéseket írjon a Cosmos DB lekérdezési nyelv használatával. Függetlenül attól, hogy teljesítményre, költségre vagy méretezhetőségre optimalizál, a Query Advisor végrehajtható javaslatokat nyújt, amelyekkel a lehető legtöbbet hozhatja ki adataiból az Azure-ban és a Microsoft Fabricben.
Miért fontos a lekérdezésoptimalizálás?
A Cosmos DB lekérdezési nyelve (az Azure-ban és a Fabricben) rugalmas, így a fejlesztők jSON-adatokat kérdezhetnek le ismerős SQL-szerű szintaxissal. Az alkalmazások összetettségének növekedésével a lekérdezési struktúra kisebb eltérései jelentős hatással lehetnek a teljesítményre és a kérelemegységekre (kérelemegységekre), különösen nagy méretekben.
Például két olyan lekérdezés, amely ugyanazt az eredményt adja vissza, a predikátumok írása és az indexek alkalmazása alapján jelentősen eltérhet a hatékonyságban.
A Lekérdezési tanácsadó elemzi a lekérdezéseket, és célzott javaslatokat kínál a segítségére:
- Csökkentse a ru-költségeket a nem hatékony kifejezések vagy a szükségtelen szűrők azonosításával.
- A lekérdezési teljesítmény javítása optimálisabb lekérdezési struktúrákkal.
- Az egyes javaslatok mögötti "miért" megértése világos, fejlesztőbarát nyelven írt magyarázatokkal.
Hogyan működik?
Lekérdezés végrehajtásakor a Lekérdezési tanácsadó végigfut a lekérdezési terven, kiértékeli azokat a mintákat, amelyek magas ru-használatot, túlzott vizsgálatot vagy esetleg szükségtelen feldolgozást okozhatnak. Ezután olyan javaslatokat ad vissza, amelyek jelzik, hogy a lekérdezés mely része korlátozhatja a teljesítményt, és olyan lehetséges módosításokat javasol, amelyek segíthetnek.
A Query Advisor használata
A Query Advisor képességeinek engedélyezéséhez állítsa be a tulajdonságot a PopulateQueryAdviceQueryRequestOptions következőre true: . Ha nincs megadva, PopulateQueryAdvice az alapértelmezett érték a .false A tanács eléréséhez használja a sztring tulajdonságot FeedResponse.QueryAdvice.
Fontos
A Query Advisor csak a Cosmos DB-hez készült .NET SDK-val működik. A lekérdezési tanácsok szintén csak az első körúton lesznek visszaadva. A tanács nem érhető el a későbbi folytatási hívásokhoz.
Fontolja meg ezt a példa lekérdezést:
SELECT VALUE
r.id
FROM
root r
WHERE
CONTAINS(r.name, 'Abc')
Íme egy példa egy SDK-kérésre, amely végrehajtja ezt a lekérdezést, és a Query Advisort használja:
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);
Ez a kérés egyetlen tanácsadási utasítást ad vissza a következőhöz QA1002:
QA1002: If you are matching on a string prefix, consider using STARTSWITH. [...]
A lekérdezési tanács három fontos információt tartalmaz:
-
A lekérdezési tanácsadás azonosítója:
QA1002 -
A tanács leírása: Ebben a példában
If you are matching on a string prefix, consider using STARTSWITH. - A dokumentációra mutató hivatkozás: A részletes útmutató URL-címe
Megjegyzés:
A példában nem szerepel a dokumentációra mutató hivatkozás.
Példák
Tekintse meg az alábbi példákat azokra a forgatókönyvekre, ahol használhatja a Query Advisort.
A rendszerfüggvények használatának optimalizálása
Tekintse meg ezt a példát, amelyben a GetCurrentTimestamp függvényt használják:
SELECT
GetCurrentTicks()
FROM
container c
WHERE
GetCurrentTimestamp() > 10
Ebben a példában a Query Advisor két tanácsot ad vissza: QA1008 és QA1009. Minden egyes tanács egy új sorra van elválasztva a sztring kimenetében.
QA1009: Consider using GetCurrentTimestampStatic instead of GetCurrentTimestamp in the WHERE clause. [...]
QA1008: Consider using GetCurrentTicksStatic instead of GetCurrentTicks in the WHERE clause. [...]
Ezzel a tanácssal átírhatja a lekérdezést a következő alternatívára:
SELECT
GetCurrentTicksStatic()
FROM
container c
WHERE
GetCurrentTimestampStatic() > 10