Hababka lagu wanaajinayo weydiimaha LINQ ee C#.NET

Horudhac

Π’ maqaalkani hababka hagaajinta qaarkood ayaa la tixgeliyey Su'aalaha LINQ.
Halkan waxaan sidoo kale ku soo bandhigaynaa qaar ka mid ah habab kale oo dheeraad ah oo lagu hagaajinayo koodka ee la xiriira Su'aalaha LINQ.

Waxaa la og yahay in LINQ(Query-isku-dhafan) waa luuqad fudud oo ku habboon in la waydiiyo isha xogta.

А LINQ ilaa SQL waa tignoolajiyada lagu galo xogta DBMS. Kani waa qalab awood badan oo lagu shaqaynayo xogta, halkaas oo su'aalaha lagu dhisay luuqad caddaynaysa, oo markaa loo rogi doono Su'aalaha SQL madal oo loo diro server-ka xogta si loo fuliyo. Xaaladeena, DBMS waxaan ula jeednaa MS SQL Server.

Si kastaba ha ahaatee, Su'aalaha LINQ looma rogin kuwo si fiican u qoran Su'aalaha SQL, Kaas oo DBA khibrad leh ay ku qori karto dhammaan nuucyada hagaajinta Su'aalaha SQL:

  1. isku xirka ugu fiican (JOINiyo shaandhaynta natiijooyinkaHALKEE)
  2. nuances badan oo ku saabsan isticmaalka isku xirka iyo xaaladaha kooxda
  3. kala duwanaansho badan oo ku saabsan beddelka xaaladaha IN on JIRAΠΈ Aan gudaha u galin, <> ku JIRA
  4. kaydinta dhexdhexaadka ah ee natiijooyinka iyada oo loo marayo miisaska ku meel gaarka ah, CTE, doorsoomayaasha miiska
  5. isticmaalka jumlada (OPTION) oo leh tilmaamo iyo tilmaamo miiska IYO (...)
  6. iyadoo la isticmaalayo aragtiyo la tixgaliyay sida mid ka mid ah siyaabaha looga takhaluso akhrinta xogta aan badnayn inta lagu jiro xulashada

Caqabadaha ugu weyn ee waxqabadka ee natiijada Su'aalaha SQL marka la ururinayo Su'aalaha LINQ waa:

  1. xoojinta habka xulashada xogta oo dhan hal codsi
  2. nuqul ka samaynta blocks isku midka ah ee koodka, kaas oo ugu dambeyntii horseedaya in la akhriyo xog badan oo aan loo baahnayn
  3. kooxo xaalado ka kooban qaybo badan (macquul ah "iyo" iyo "ama") - IYO ΠΈ OR, isku darka galay xaaladaha adag, waxay keenaysaa in xaqiiqda ah in optimizer, isagoo ku habboon indexes aan-clustered ee beeraha lagama maarmaanka ah, ugu dambeyntii bilaabay in ay iskaan ka dhanka ah clustered index (clustered index).INDEX SCAN) kooxo shuruudo ah
  4. buul hoose oo qoto dheer ayaa ka dhigaya falanqaynta dhibaato aad u weyn Odhaahyada SQL iyo falanqaynta qorshaha weydiinta ee dhinaca horumarinta iyo DBA

Hababka hagaajinta

Hadda aynu si toos ah ugu dhaqaaqno hababka hagaajinta.

1) Tilmaansi dheeri ah

Way fiican tahay in la tixgeliyo filtarrada miisaska xulashada ugu weyn, maadaama inta badan dhammaan su'aalaha lagu dhiso hal ama laba miis oo waaweyn (arjiyada-shaqada-dadka) iyo shuruudaha caadiga ah (Waa xiran yahay, la joojiyay, la furay, la furay, heerka). Waa muhiim in la sameeyo tusiyo ku habboon shaybaarrada la aqoonsaday.

Xalkani wuxuu macno samaynayaa marka la dooranayo meelahan si weyn u xaddidaya go'aanka lagu soo celiyay weydiinta.

Tusaale ahaan, waxaanu haynaa 500000 codsi. Si kastaba ha ahaatee, waxaa jira kaliya 2000 codsiyo firfircoon. Dabadeed tilmaan si sax ah loo doortay ayaa naga badbaadin doonta INDEX SCAN on miis weyn oo kuu ogolaanaya inaad si degdeg ah u doorato xogta iyada oo loo marayo index aan-clustered.

Sidoo kale, la'aanta tilmaan-bixineed ayaa lagu aqoonsan karaa iyada oo loo marayo dardar-gelinta falanqaynta qorshayaasha weydiinta ama ururinta tirakoobka aragtida nidaamka MS SQL Server:

  1. sys.dm_db_missing_index_groups
  2. sys.dm_db_missing_index_group_stats
  3. sys.dm_db_missing_index_details

Dhammaan xogta aragtida waxay ka kooban tahay macluumaadka ku saabsan tusmooyinka maqan, marka laga reebo tusmooyinka boosaska.

Si kastaba ha ahaatee, tusmooyinka iyo kaydinta inta badan waa habab lagula dagaallamo cawaaqibka qoraalka xun Su'aalaha LINQ ΠΈ Su'aalaha SQL.

Sida dhaqanka qallafsan ee noloshu muujinayo, inta badan waxa muhiim u ah ganacsigu in uu hirgeliyo astaamaha ganacsi wakhtiyada kama dambaysta ah. Sidaa darteed, codsiyada culus ayaa badanaa lagu wareejiyaa asalka iyadoo la kaydinayo.

Tani qayb ahaan waa la caddeeyey, maadaama isticmaaluhu aanu had iyo jeer u baahnayn xogtii ugu dambaysay oo ay jirto heer la aqbali karo oo ka jawaab celin is-dhexgalka isticmaalaha.

Habkani wuxuu u oggolaanayaa xallinta baahida ganacsiga, laakiin ugu dambeyntii waxay yareysaa waxqabadka nidaamka macluumaadka iyadoo si fudud dib loogu dhigayo xalalka dhibaatooyinka.

Waxa kale oo mudan in la xasuusto in habka raadinta tusmooyinka lagama maarmaanka ah lagu daro, soo jeedinta MS SQL hagaajintu waxay noqon kartaa khalad, oo ay ku jiraan xaaladaha soo socda:

  1. haddii ay jiraan tusmooyin la mid ah goobo la mid ah
  2. haddii beeraha shaxda aan la tix-raaci karin sababtoo ah xaddidaadaha tusmaynta (oo si faahfaahsan loo sharraxay halkan).

2) Isku-dubarid sifada hal sifo oo cusub

Mararka qaarkood meelaha qaar ee hal miis, kuwaas oo u adeega sida aasaaska koox shuruudo ah, waxaa lagu bedeli karaa in la soo bandhigo hal goob oo cusub.

Tani waxay si gaar ah run ugu tahay goobaha heerka, kuwaas oo inta badan ah ama xoogaa yar ama tiro ahaan.

Tusaale:

Is-xiran = 0 waana la joojiyay = 0 oo la dajiyay = 0 waxaa bedelay Xaaladda = 1.

Halkani waa meesha sifada heerka isugaynta laga soo bandhigay si loo hubiyo in heerarkan ay ka buuxaan miiska. Marka xigta, sifadan cusub waa la tusmeeyay.

Tani waa xalka aasaasiga ah ee dhibaatada waxqabadka, sababtoo ah Waxaan helnaa xogta iyada oo aan xisaabin loo baahnayn.

3) Qalabaynta aragtida

Nasiib darro gudaha Su'aalaha LINQ Miisaska ku meel gaadhka ah, CTE-yada, iyo doorsoomayaasha miiska si toos ah looma isticmaali karo.

Si kastaba ha ahaatee, waxaa jira hab kale oo lagu hagaajin karo kiiskan - indexed views.

Kooxda xaaladaha (laga bilaabo tusaalaha sare) Is-xiran = 0 waana la joojiyay = 0 oo la dajiyay = 0 (ama shuruudo kale oo la mid ah) waxay noqotaa ikhtiyaar wanaagsan in lagu isticmaalo aragti la tilmaansaday, iyadoo la kaydinayo cad yar oo xog ah oo laga soo qaaday gogol weyn.

Laakiin waxaa jira tiro xaddidaadyo ah marka la xaqiijinayo aragtida:

  1. isticmaalka subqueries, clauses JIRA waa in lagu badalaa iyadoo la isticmaalayo JOIN
  2. ma isticmaali kartid jumlado UNION, MIDOW DHAMMAAN, MARKA LAGA REEBO, INTIRSAN
  3. Ma isticmaali kartid tilmaanta miiska iyo qodobbada OPTION
  4. suurtogal ma aha in lagu shaqeeyo wareegyada
  5. Suurtagal maaha in xogta lagu soo bandhigo hal aragti oo laga soo qaatay miisas kala duwan

Waxaa muhiim ah in la xasuusto in faa'iidada dhabta ah ee isticmaalka aragtida la calaamadeeyay lagu gaari karo oo kaliya in dhab ahaantii la calaamadiyo.

Laakin markaad wacdo aragti, tusmooyinkan waxaa laga yaabaa inaan la isticmaalin, iyo si aad si cad ugu isticmaasho, waa inaad qeexdaa leh (NOEXPAND).

Tan iyo markii Su'aalaha LINQ Suurtagal maaha in la qeexo tilmaamaha miiska, markaa waa inaad abuurtaa matalaad kale - "duub" ee foomka soo socda:

CREATE VIEW ИМЯ_прСдставлСния AS SELECT * FROM MAT_VIEW WITH (NOEXPAND);

4) Isticmaalka hawlaha miiska

Inta badan gudaha Su'aalaha LINQ Baloogyo waaweyn oo su'aalo-hoosaadyo ah ama baloogyo isticmaalaya aragtiyo leh qaab-dhismeed kakan ayaa sameeya waydiin kama dambays ah oo leh qaab-fulin aad u adag oo hooseeya.

Faa'iidooyinka Muhiimka ah ee Isticmaalka Hawlaha Miiska ee gudaha Su'aalaha LINQ:

  1. Awoodda, sida dhinaca aragtida, in loo isticmaalo oo lagu qeexo shay ahaan, laakiin waxaad gudbin kartaa jaangooyooyin wax gelin ah:
    KA SOCOTA SHAQADA (@param1, @param2 ...)
    Natiijo ahaan, muunad xog dabacsan ayaa la gaari karaa
  2. Marka laga hadlayo isticmaalka shaqada miiska, ma jiraan xaddidaadyo xooggan sida marka la eego aragtida la tilmaansaday ee kor lagu sharraxay:
    1. Tilmaamaha miiska:
      iyada oo loo marayo LINQ Ma cayimi kartid tusmooyinka ay tahay in la isticmaalo oo go'aamin kartid heerka go'doominta xogta marka la waydiinayo.
      Laakiin shaqadu waxay leedahay awoodahaas.
      Hawsha, waxaad ku gaadhi kartaa qorshe su'aal fulineed oo joogto ah, halkaasoo xeerarka ku shaqaynta tusmooyinka iyo heerarka go'doominta xogta lagu qeexay
    2. Isticmaalka shaqadu waxa ay ogolanaysaa, marka la barbardhigo aragtiyaha la calaamadeeyay, in la helo:
      • macquulka muunada xogta adag (xitaa isticmaalka loops)
      • ka soo qaadashada xogta miisasyo badan oo kala duwan
      • isticmaalka UNION ΠΈ JIRA

  3. Bixi OPTION aad u faa'iido leh marka aan u baahanahay inaan bixino kontoroolka kontoroolka OPTION(MAXDOP N), sida ay u kala horreeyaan qorshaha fulinta weydiinta. Tusaale ahaan:
    • waxaad qeexi kartaa dib-u-abuur lagu qasbay qorshaha weydiinta Ikhtiyaarka (dib u soo ururi)
    • waxaad qeexi kartaa inaad ku qasbi karto qorshaha waydiinta inuu isticmaalo amarka ku biirista ee lagu sheegay waydiinta Ikhtiyaarka (AMAR XOOGGA)

    Faahfaahin dheeraad ah oo ku saabsan OPTION lagu tilmaamay halkan.

  4. Adigoo isticmaalaya jeex xogta ugu cidhiidhi ah oo loo baahan yahay:
    Looma baahna in lagu kaydiyo xogta waaweyn ee khasnado (sida xaaladdu tahay aragtida la tilmaansaday), taas oo aad weli u baahan tahay inaad xogta ku shaandhayso.
    Tusaale ahaan, waxa jira miis shaandhayntiisa HALKEE saddex beerood ayaa loo isticmaalaa (a, b, c).

    Caadiyan, dhammaan codsiyada waxay leeyihiin xaalad joogto ah a = 0 iyo b = 0.

    Si kastaba ha ahaatee, codsiga garoonka c doorsoomayaal badan.

    Allow shardi a = 0 iyo b = 0 Waxay runtii naga caawinaysaa inaan xaddidno natiijada loo baahan yahay ee kumanaan diiwaanno ah, laakiin xaaladdu way jirtaa с wuxuu soo koobayaa doorashada ilaa boqol diiwaan.

    Halkan shaqada miiska ayaa laga yaabaa inay noqoto ikhtiyaar ka fiican.

    Sidoo kale, shaqada miiska ayaa ah mid la saadaalin karo oo joogto ah waqtiga fulinta.

tusaalooyin

Aynu eegno tusaale fulinta anagoo tusaale ahaan u adeegsanayna xogta su'aalaha.

Waxaa jira codsi Dooro, kaas oo isku dara dhawr jadwal oo adeegsada hal aragti (OperativeQuestions), kaas oo xidhiidhka email ahaan lagu hubiyo (iyada oo loo marayo JIRA) ilaa "Su'aalaha Firfircoon" ([OperativeQuestions]):

Codsiga No. 1

(@p__linq__0 nvarchar(4000))SELECT
1 AS [C1],
[Extent1].[Id] AS [Id],
[Join2].[Object_Id] AS [Object_Id],
[Join2].[ObjectType_Id] AS [ObjectType_Id],
[Join2].[Name] AS [Name],
[Join2].[ExternalId] AS [ExternalId]
FROM [dbo].[Questions] AS [Extent1]
INNER JOIN (SELECT [Extent2].[Object_Id] AS [Object_Id],
[Extent2].[Question_Id] AS [Question_Id], [Extent3].[ExternalId] AS [ExternalId],
[Extent3].[ObjectType_Id] AS [ObjectType_Id], [Extent4].[Name] AS [Name]
FROM [dbo].[ObjectQuestions] AS [Extent2]
INNER JOIN [dbo].[Objects] AS [Extent3] ON [Extent2].[Object_Id] = [Extent3].[Id]
LEFT OUTER JOIN [dbo].[ObjectTypes] AS [Extent4] 
ON [Extent3].[ObjectType_Id] = [Extent4].[Id] ) AS [Join2] 
ON [Extent1].[Id] = [Join2].[Question_Id]
WHERE ([Extent1].[AnswerId] IS NULL) AND (0 = [Extent1].[Exp]) AND ( EXISTS (SELECT
1 AS [C1]
FROM [dbo].[OperativeQuestions] AS [Extent5]
WHERE (([Extent5].[Email] = @p__linq__0) OR (([Extent5].[Email] IS NULL) 
AND (@p__linq__0 IS NULL))) AND ([Extent5].[Id] = [Extent1].[Id])
));

Aragtidu waxay leedahay qaab-dhismeed aad u adag: waxay leedahay isku-xidhka subquery waxayna isticmaashaa kala-soocidda DISTINCT, kaas oo guud ahaan ah hawl-gal khayraad ku salaysan oo cadaalad ah.

Tusaalaha Su'aalaha Operative waa ilaa toban kun oo diiwaan.

Dhibaatada ugu weyn ee su'aashan ayaa ah in diiwaanada ka yimid su'aalaha dibadda, subquery gudaha ah ayaa lagu fuliyay aragtida [OperativeQuestions], taas oo ah [Email] = @p__linq__0 waxay noo ogolaataa inaan xaddidno xulashada wax soo saarka (iyada oo loo marayo JIRA) ilaa boqollaal diiwaan.

Waxayna u ekaan kartaa in subquery uu ku xisaabinayo diiwaanada hal mar [Email] = @p__linq__0, ka dibna labadan boqol ee diiwaanka waa in lagu xidhaa Id Su'aalo, waydiinadu waxay noqon doontaa mid degdeg ah.

Dhab ahaantii, waxaa jira isku xirnaan xiriir ah oo dhammaan miisaska: hubinta waraaqaha Aqoonsiga Su'aalaha Id ee Su'aalaha Operative, iyo ku shaandhaynta iimaylka.

Dhab ahaantii, codsigu wuxuu la shaqeeyaa dhammaan tobanaan kun ee Diiwaanka Su'aalaha Operative, laakiin kaliya xogta xiisaha ayaa looga baahan yahay iimaylka.

OperativeSu'aalaha eeg qoraalka:

Codsiga No. 2

 
CREATE VIEW [dbo].[OperativeQuestions]
AS
SELECT DISTINCT Q.Id, USR.email AS Email
FROM            [dbo].Questions AS Q INNER JOIN
                         [dbo].ProcessUserAccesses AS BPU ON BPU.ProcessId = CQ.Process_Id 
OUTER APPLY
                     (SELECT   1 AS HasNoObjects
                      WHERE   NOT EXISTS
                                    (SELECT   1
                                     FROM     [dbo].ObjectUserAccesses AS BOU
                                     WHERE   BOU.ProcessUserAccessId = BPU.[Id] AND BOU.[To] IS NULL)
) AS BO INNER JOIN
                         [dbo].Users AS USR ON USR.Id = BPU.UserId
WHERE        CQ.[Exp] = 0 AND CQ.AnswerId IS NULL AND BPU.[To] IS NULL 
AND (BO.HasNoObjects = 1 OR
              EXISTS (SELECT   1
                           FROM   [dbo].ObjectUserAccesses AS BOU INNER JOIN
                                      [dbo].ObjectQuestions AS QBO 
                                                  ON QBO.[Object_Id] =BOU.ObjectId
                               WHERE  BOU.ProcessUserAccessId = BPU.Id 
                               AND BOU.[To] IS NULL AND QBO.Question_Id = CQ.Id));

Khariidaynta aragtida hore ee DbContext (EF Core 2)

public class QuestionsDbContext : DbContext
{
    //...
    public DbQuery<OperativeQuestion> OperativeQuestions { get; set; }
    //...
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Query<OperativeQuestion>().ToView("OperativeQuestions");
    }
}

Weydiinta LINQ ee hore

var businessObjectsData = await context
    .OperativeQuestions
    .Where(x => x.Email == Email)
    .Include(x => x.Question)
    .Select(x => x.Question)
    .SelectMany(x => x.ObjectQuestions,
                (x, bo) => new
                {
                    Id = x.Id,
                    ObjectId = bo.Object.Id,
                    ObjectTypeId = bo.Object.ObjectType.Id,
                    ObjectTypeName = bo.Object.ObjectType.Name,
                    ObjectExternalId = bo.Object.ExternalId
                })
    .ToListAsync();

Xaaladdan gaarka ah, waxaan ka fekereynaa xalinta dhibaatadan iyada oo aan isbeddelin kaabayaal dhaqaale ah, iyada oo aan la soo bandhigin miis gaar ah oo leh natiijooyin diyaarsan ("Queries Active"), kaas oo u baahan doona hab lagu buuxiyo xogta iyo la socoshada taariikhda. .

Inkasta oo tani ay tahay xal wanaagsan, waxaa jira ikhtiyaar kale oo lagu hagaajin karo dhibaatadan.

Ujeedada ugu weyn waa in lagu kaydiyo gelinta [Email] = @p__linq__0 laga soo bilaabo aragtida OperativeQuestions.

Soo bandhig shaqada miiska [dbo].[OperativeQuestionsUserMail] gal xogta xogta.

Marka aan dirno iimaylka sidii halbeeg gelinta, waxaanu dib u helaynaa shaxda qiyamka:

Codsiga No. 3


CREATE FUNCTION [dbo].[OperativeQuestionsUserMail]
(
    @Email  nvarchar(4000)
)
RETURNS
@tbl TABLE
(
    [Id]           uniqueidentifier,
    [Email]      nvarchar(4000)
)
AS
BEGIN
        INSERT INTO @tbl ([Id], [Email])
        SELECT Id, @Email
        FROM [OperativeQuestions]  AS [x] WHERE [x].[Email] = @Email;
     
    RETURN;
END

Tani waxay soo celinaysaa shaxda qiyamka oo leh qaab-dhismeed xog hore loo qeexay.

Si su'aalaha OperativeQuestionsUserMail ay u noqdaan kuwa ugu wanaagsan oo ay yeeshaan qorshooyin weydiin wanaagsan, qaabdhismeed adag ayaa loo baahan yahay, oo aan loo baahnayn. MIISKA U SOO NOQDA SIDA SOO NOQOSHADA...

Xaaladdan oo kale, weydiinta 1 ee loo baahan yahay waxaa loo rogaa weydiinta 4:

Codsiga No. 4

(@p__linq__0 nvarchar(4000))SELECT
1 AS [C1],
[Extent1].[Id] AS [Id],
[Join2].[Object_Id] AS [Object_Id],
[Join2].[ObjectType_Id] AS [ObjectType_Id],
[Join2].[Name] AS [Name],
[Join2].[ExternalId] AS [ExternalId]
FROM (
    SELECT Id, Email FROM [dbo].[OperativeQuestionsUserMail] (@p__linq__0)
) AS [Extent0]
INNER JOIN [dbo].[Questions] AS [Extent1] ON([Extent0].Id=[Extent1].Id)
INNER JOIN (SELECT [Extent2].[Object_Id] AS [Object_Id], [Extent2].[Question_Id] AS [Question_Id], [Extent3].[ExternalId] AS [ExternalId], [Extent3].[ObjectType_Id] AS [ObjectType_Id], [Extent4].[Name] AS [Name]
FROM [dbo].[ObjectQuestions] AS [Extent2]
INNER JOIN [dbo].[Objects] AS [Extent3] ON [Extent2].[Object_Id] = [Extent3].[Id]
LEFT OUTER JOIN [dbo].[ObjectTypes] AS [Extent4] 
ON [Extent3].[ObjectType_Id] = [Extent4].[Id] ) AS [Join2] 
ON [Extent1].[Id] = [Join2].[Question_Id]
WHERE ([Extent1].[AnswerId] IS NULL) AND (0 = [Extent1].[Exp]);

Aragtida khariidaynta iyo hawlaha DbContext (EF Core 2)

public class QuestionsDbContext : DbContext
{
    //...
    public DbQuery<OperativeQuestion> OperativeQuestions { get; set; }
    //...
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Query<OperativeQuestion>().ToView("OperativeQuestions");
    }
}
 
public static class FromSqlQueries
{
    public static IQueryable<OperativeQuestion> GetByUserEmail(this DbQuery<OperativeQuestion> source, string Email)
        => source.FromSql($"SELECT Id, Email FROM [dbo].[OperativeQuestionsUserMail] ({Email})");
}

Weydiinta LINQ ee u dambaysa

var businessObjectsData = await context
    .OperativeQuestions
    .GetByUserEmail(Email)
    .Include(x => x.Question)
    .Select(x => x.Question)
    .SelectMany(x => x.ObjectQuestions,
                (x, bo) => new
                {
                    Id = x.Id,
                    ObjectId = bo.Object.Id,
                    ObjectTypeId = bo.Object.ObjectType.Id,
                    ObjectTypeName = bo.Object.ObjectType.Name,
                    ObjectExternalId = bo.Object.ExternalId
                })
    .ToListAsync();

Nidaamka wakhtiga fulinta ayaa hoos uga dhacay 200-800 ms, ilaa 2-20 ms, iwm, i.e. tobanaan jeer oo degdeg ah.

Haddii aan u qaadanno celcelis ahaan, ka dib halkii 350 ms waxaan helnay 8 ms.

Faa'iidooyinka muuqda waxaan sidoo kale helnaa:

  1. hoos u dhaca guud ee culayska akhriska,
  2. hoos u dhac weyn oo ku yimid suurtagalnimada xannibista
  3. yaraynta celceliska waqtiga xannibaadda qiyamka la aqbali karo

gunaanad

Hagaajinta iyo hagaajinta wicitaanada xogta MS SQL iyada oo loo marayo LINQ waa dhibaato la xalin karo.

Feejignaanta iyo joogtaynta ayaa aad muhiim ugu ah shaqadan.

Bilawga hawsha:

  1. waxaa lagama maarmaan ah in la hubiyo xogta uu codsigu ku shaqeeyo (qiimaha, noocyada xogta la doortay)
  2. samee tusmaynta saxda ah ee xogtan
  3. hubi saxnaanta shuruudaha ku biirista ee miisaska dhexdooda

Kordhinta soo socota ayaa muujinaysa:

  1. saldhigga codsiga oo qeexaya filtarka codsiga ugu weyn
  2. ku celcelinta baloogyada su'aalaha la midka ah iyo falanqaynta is-goysyada xaaladaha
  3. SSMS ama GUI kale oo loogu talagalay SQL Server is wanaajiso Su'aasha SQL (Qoritaanka kaydinta xogta dhexdhexaadka ah, dhisida su'aalaha natiijada iyadoo la adeegsanayo kaydintan (waxaa jiri kara dhowr))
  4. marxalada ugu danbeysa, anagoo ku salaynaya natiijada Su'aasha SQL, dhismihii waa la dhisayaa Weydiinta LINQ

Natiijada Weydiinta LINQ waa inuu noqdaa mid la mid ah qaab dhismeedka kan la aqoonsaday Su'aasha SQL laga bilaabo qodobka 3aad.

Mahadnaq

Aad baad u mahadsantahay asxaabta jobgemws ΠΈ alex_ozr ka shirkadda Fortis si loogu caawiyo diyaarinta alaabtan.

Source: www.habr.com

Add a comment