Dela via


Optimerade frågedatamönster

Det enklaste och snabbaste mönstret för dataförfrågningar är:

  1. En enkel tabell eller vy
  2. Förfiltrerad på servern till det du behöver
  3. Kolumner indexeras korrekt för de förväntade frågorna

När du designar din app måste du tänka på hur du snabbt kan söka efter data. Det bästa sättet att fråga data är att använda en enda tabell eller vy som har all information du behöver, och filtrera den på servern innan du visar den i din app. Du måste också se till att kolumnerna du använder för att filtrera eller sortera data är korrekt indexerade. Detta gör din app snabbare och smidigare.

Anta till exempel att du har ett galleri som visar en lista över kunder och deras säljare. Om du lagrar kund- och säljarinformationen i separata tabeller måste du använda uppslagningar för att få säljarens namn för varje kund. Detta saktar ner din app eftersom den behöver köra många frågor till den andra tabellen. Ett bättre sätt är att skapa en vy som kombinerar kund- och säljarinformation i en tabell och använda den vyn som datakälla för ditt galleri. Då behöver din app bara köra en fråga för att få all data den behöver.

Det finns en avvägning mellan frågehastighet och datanormalisering. Datanormalisering innebär att du bara lagrar data en gång och undviker dubbletter. Detta hjälper till att hålla data konsekvent och korrekt. Men ibland behöver du duplicera vissa data för att göra frågorna snabbare och enklare. Du måste balansera dessa två mål i din appdesign och tabellstruktur. Annars kommer din app att vara långsam och hackig eftersom den behöver utföra många arbetssteg för att filtrera och sammanfoga data från olika tabeller.

Använd vyer på serversidan

Vyer är förmodligen det vanligaste verktyget för att balansera dessa mål. De presenterar en enda tabellstruktur för frågor, förfiltrerar data för vad du behöver i frågan och möjliggör uppslagningar och kopplingar till andra tabeller. Eftersom filtren, uppslagningarna och kopplingarna för vyn beräknas på servern, minimeras både nyttolasten och beräkningen på klientsidan.

Ett galleri kan visa många poster från en datakälla. Men ibland måste du visa ytterligare information från en annan datakälla som är relaterad till den ursprungliga. Du har till exempel ett galleri som visar en lista över kunder och du vill visa namnet på säljaren som är tilldelad varje kund. Säljarens namn lagras i en annan datakälla än kundens information. För att visa säljarens namn behöver du använda en uppslagsfunktion som hittar den matchande posten i den andra datakälla. Detta utökar den ursprungliga tabellen med uppslagsvärdena.

Det kan dock gå väldigt långsamt att utöka tabellen om du har många poster och många uppslagningar. För varje post i galleriet måste appen köra en separat fråga till den andra datakälla och hämta uppslagsvärdet. Det betyder att appen kan behöva köra många frågor för varje post, vilket kan ta lång tid och påverka appens prestanda. Detta antimönster är ibland känt som "N squared, (n^2)" eller ett "N+1"-problem.

Använd StartsWith eller Filter

Power Fx ger flera sätt att söka data. Använd i allmänhet ett uttryck som utnyttjar ett index som StartsWith eller Filter istället för en som läser hela tabellen som In. Operatorn In är bra för samlingar i minnet eller om den externa datakälla-tabellen är mycket liten.

Överväg att duplicera data

Ibland är data långsam att komma åt i en fråga eftersom den lagras på en annan plats eller i ett annat format. För att göra frågan snabbare kan du kopiera långsam data och lagra den lokalt i en tabell som är snabb och enkel att fråga. Det betyder dock att den lokala informationen kanske inte är den mest uppdaterade versionen av originaldata. Kör sedan en annan process för att uppdatera den lokala data regelbundet. Denna process kan vara en Power Automate-flöde, en plugin, en lagrad procedur eller någon annan metod som kan flytta data från en plats till en annan.

Frekvenskravet för uppdatering av lokala data beror på ditt företags behov. Hur färsk måste data vara för din app? Anta till exempel att du arbetar för Contoso, ett företag som säljer cyklar. Listan över tillgängliga cyklar lagras i en produktdatabas som du kan komma åt via ett API i ett anpassat anslutningsprogram. Men säg att API-anropet är långsamt, så du bestämmer dig för att kopiera produktdata och lagra den lokalt i en tabell. Sedan skapar du en vy som kombinerar din tabell med annan relevant data för din app. Du skapar också en Power Automate-flöde som körs varje dag och uppdaterar din tabell med den senaste produktdatan från API:et. Då kan din app fråga efter lokal data snabbare, och data är högst en dag gammal.

Duplicering av data är en vanlig typ av teknik i företagsapplikationer för att säkerställa god prestanda. Du kan använda Dataverse plugin-program, lagrade procedurer eller dataförflyttning för att duplicera data till en enda tabell som är optimerad för sökning. Nyckelfrågan är: hur uppdaterad måste dessa uppgifter vara? Om du har råd med lite förseningar kan du använda den här tekniken för att snabba upp din app.

Förslag

För att uppnå detta mål, överväg följande frågor och förslag:

  1. Hur viktigt är det för en kund att se datavärdet i ett galleri eller ett datanät? Skulle det vara acceptabelt att först välja en post och sedan visa data i ett formulär?
  2. Kan en vy göra det förarbete som krävs för att se data i rätt format?
  3. Använder du en "IN"-operator där en "StartsWith" fungerar?
  4. Hur aktuell behöver din data vara? Finns det en strategi datadubblering du kan använda för att få din fråga att fungera över en enda tabell som standard?