Nā ala no ka hoʻonui ʻana i nā nīnau LINQ ma C#.NET

Hōʻike

В kēiaʻatikala ua noʻonoʻo ʻia kekahi mau ʻano hoʻolālā Nā nīnau LINQ.
Eia kekahi, hōʻike mākou i kekahi mau ala e pili ana i ka code optimization e pili ana Nā nīnau LINQ.

Uaʻikeʻia LINQ(Language-Integrated Query) he ʻōlelo maʻalahi a maʻalahi no ka nīnau ʻana i kahi kumu ʻikepili.

А LINQ i SQL he ʻenehana no ka loaʻa ʻana o ka ʻikepili ma kahi DBMS. He mea hana ikaika kēia no ka hana ʻana me ka ʻikepili, kahi i kūkulu ʻia ai nā nīnau ma o ka ʻōlelo hoʻolaha, a laila e hoʻololi ʻia i loko Nā nīnau SQL kahua a hoʻouna ʻia i ke kikowaena waihona no ka hoʻokō. I kā mākou hihia, e DBMS mākou e ʻōlelo nei Pūnaewele MS SQL.

Eia naʻe, Nā nīnau LINQ ʻaʻole i hoʻololi ʻia i mea kākau maikaʻi loa Nā nīnau SQL, hiki i kahi DBA akamai ke kākau me nā nuances a pau o ka optimization Nā nīnau SQL:

  1. nā pilina maikaʻi loa (hui) a me ka kānana ʻana i nā hopena (kahi)
  2. nui nā nuances i ka hoʻohana ʻana i nā pilina a me nā kūlana hui
  3. nui nā ʻano like ʻole i ka hoʻololi ʻana i nā kūlana IN maluna o OLELO HOOLAHAи AOLE IN, <> ma OLELO HOOLAHA
  4. ka hoʻopaʻa ʻana i waena o nā hualoaʻa ma o nā pākaukau pōkole, CTE, nā ʻano hoʻololi papa
  5. ka hoʻohana ʻana i ka ʻōlelo (ʻO OPTION) me nā ʻōlelo aʻo a me nā ʻōlelo hōʻike papa ME (...)
  6. ka hoʻohana ʻana i nā manaʻo i kuhikuhi ʻia ma ke ʻano he mea e hoʻopau ai i ka heluhelu ʻana i ka ʻikepili i ka wā e koho ai

ʻO nā bottlenecks hana nui o ka hopena Nā nīnau SQL i ka houluulu ana Nā nīnau LINQ i:

  1. ka hoʻohui ʻana o ka mīkini koho ʻikepili holoʻokoʻa i hoʻokahi noi
  2. ka hoʻopāpā ʻana i nā poloka like ʻole o ke code, kahi e alakaʻi ai i nā heluhelu ʻikepili pono ʻole
  3. nā pūʻulu o nā kūlana multi-component (logical "a" a me "aiʻole") - AND и OR, hui pū ʻana i nā kūlana paʻakikī, alakaʻi i ka ʻoiaʻiʻo o ka optimizer, me ka loaʻa ʻana o nā indexes non-clustered kūpono no nā māla e pono ai, hoʻomaka i ka nānā ʻana i ka index clustered (NUI INDEX) e nā hui o nā kūlana
  4. ʻO ka nesting hohonu o nā subqueries he pilikia loa ka parsing Nā ʻōlelo SQL a me ka nānā 'ana i ka ho'olālā nīnau ma ka 'ao'ao o nā mea ho'omohala a DBA

Nā ʻano hana hoʻoponopono

I kēia manawa, e neʻe pololei kākou i nā ʻano hoʻolālā.

1) Ka helu helu hou

ʻOi aku ka maikaʻi e noʻonoʻo i nā kānana ma nā papa koho nui, no ka mea, ua kūkulu pinepine ʻia ka nīnau holoʻokoʻa a puni hoʻokahi a ʻelua paha papa nui (nā noi-people-operations) a me kahi kūlana maʻamau (IsClosed, Canceled, Enabled, Status). He mea nui ka hana ʻana i nā hōʻailona kūpono no nā laʻana i ʻike ʻia.

Maikaʻi kēia hoʻonā i ka wā e koho ai i kēia mau kahua e kaupalena nui i ka hoʻonohonoho i hoʻihoʻi ʻia i ka nīnau.

No ka laʻana, loaʻa iā mākou 500000 mau noi. Eia naʻe, aia wale nō 2000 mau noi hana. A laila e hoʻopakele iā mākou i kahi kuhikuhi i koho pono ʻia NUI INDEX ma ka papaʻaina nui a e ʻae iā ʻoe e koho wikiwiki i ka ʻikepili ma o kahi index non-clustered.

Eia kekahi, hiki ke ʻike ʻia ka nele o nā kuhikuhi ma o nā ʻōkuhi no ka hoʻopaʻa ʻana i nā hoʻolālā nīnau a i ʻole ka hōʻiliʻili ʻana i nā helu ʻike ʻōnaehana. Pūnaewele MS SQL:

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

Loaʻa i nā ʻikepili ʻike a pau ka ʻike e pili ana i nā kuhikuhina i nalowale, koe naʻe nā kuhikuhi kikoʻī.

Eia nō naʻe, ʻo nā indexes a me ka caching ke ʻano o ka hakakā ʻana i nā hopena o ka kākau maikaʻi ʻole Nā nīnau LINQ и Nā nīnau SQL.

E like me ka hana koʻikoʻi o ke ola e hōʻike nei, he mea nui i ka ʻoihana ke hoʻokō i nā hiʻohiʻona ʻoihana e kekahi mau lā palena. A no laila, hoʻololi pinepine ʻia nā noi koʻikoʻi i ke kua me ka caching.

Hoʻoholo ʻia kēia, ʻoiai ʻaʻole pono ka mea hoʻohana i ka ʻikepili hou loa a aia kahi pae kūpono o ka pane ʻana o ka mea hoʻohana.

Hāʻawi kēia ala i ka hoʻoponopono ʻana i nā pono ʻoihana, akā i ka hopena e hōʻemi i ka hana o ka ʻōnaehana ʻike ma ka hoʻopaneʻe wale ʻana i nā hopena i nā pilikia.

He mea pono hoʻi e hoʻomanaʻo i ka ʻimi ʻana i nā indexes pono e hoʻohui, nā manaʻo MS SQL ʻaʻole pololei paha ka hoʻonui ʻana, me ka hoʻopili ʻana ma lalo o kēia mau kūlana:

  1. inā loaʻa nā indexes me kahi pūʻulu o nā kahua like
  2. inā ʻaʻole hiki ke kuhikuhi ʻia nā māla i ka papaʻaina ma muli o ke kaohi ʻana i ka kuhikuhi ʻana (i wehewehe ʻia i nā kikoʻī hou aku maanei).

2) Hoʻohui i nā ʻano i hoʻokahi ʻano hou

I kekahi manawa, hiki ke hoʻololi ʻia kekahi mau māla mai ka papa hoʻokahi, kahi kumu no kahi hui o nā kūlana, ma ka hoʻokomo ʻana i kahi kahua hou.

He ʻoiaʻiʻo loa kēia no nā kahua kūlana, ʻo ia ka mea maʻamau a i ʻole he ʻano ʻano bit a integer paha.

Pākuhi:

Hoʻopaʻa ʻia = 0 A Hoʻopau ʻia = 0 A Hoʻā ʻia = 0 ua paniia e Kūlana = 1.

ʻO kēia kahi i hoʻokomo ʻia ai ke ʻano integer Status e hōʻoia i ka hoʻopiha ʻia ʻana o kēia mau statuses i ka papaʻaina. A laila, kuhikuhi ʻia kēia ʻano hou.

He hopena koʻikoʻi kēia i ka pilikia o ka hana, no ka mea, ʻike mākou i ka ʻikepili me ka ʻole o ka helu pono ʻole.

3) Materialization o ka ike

ʻO ka mea pōʻino, ma Nā nīnau LINQ ʻAʻole hiki ke hoʻohana pololei ʻia nā pākaukau manawa, nā CTE, a me nā mea hoʻololi papa.

Eia nō naʻe, aia kekahi ala ʻē aʻe e hoʻomaikaʻi ai i kēia hihia - nā ʻike kuhikuhi.

Pūʻulu kūlana (mai ka laʻana ma luna) Hoʻopaʻa ʻia = 0 A Hoʻopau ʻia = 0 A Hoʻā ʻia = 0 (a i ʻole he pūʻulu o nā kūlana like ʻē aʻe) lilo i koho maikaʻi e hoʻohana iā lākou i kahi ʻike kuhikuhi, e hoʻopaʻa i kahi ʻāpana liʻiliʻi o ka ʻikepili mai kahi pūʻulu nui.

Akā aia kekahi mau palena i ka wā e hoʻokō ai i kahi ʻike:

  1. me ka hoʻohana ʻana i nā subqueries, clauses OLELO HOOLAHA pono e pani ia ma ka hoohana ana hui
  2. ʻaʻole hiki iā ʻoe ke hoʻohana i nā huaʻōlelo UNION, UNION A PAU, KOE, NANEA
  3. ʻAʻole hiki iā ʻoe ke hoʻohana i nā ʻōlelo aʻoaʻo a me nā paukū ʻO OPTION
  4. ʻaʻole hiki ke hana me nā pōʻai
  5. ʻAʻole hiki ke hōʻike i ka ʻikepili i ka nānā hoʻokahi mai nā papa like ʻole

He mea nui e hoʻomanaʻo ʻo ka pōmaikaʻi maoli o ka hoʻohana ʻana i kahi hiʻohiʻona i kuhikuhi ʻia e hiki ke hoʻokō wale ʻia ma ka kuhikuhi ʻana iā ia.

Akā i ke kāhea ʻana i kahi nānā, ʻaʻole hiki ke hoʻohana ʻia kēia mau kuhikuhi, a no ka hoʻohana pono ʻana iā lākou, pono ʻoe e kuhikuhi ME (NOEXPAND).

Mai loko mai Nā nīnau LINQ ʻAʻole hiki ke wehewehe i nā hōʻailona papa, no laila pono ʻoe e hana i kahi hōʻike hou - he "wrapper" o kēia ʻano:

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

4) Ke hoʻohana nei i nā hana papaʻaina

I ka manawa pinepine Nā nīnau LINQ ʻO nā poloka nui o nā subqueries a i ʻole nā ​​poloka e hoʻohana ana i nā hiʻohiʻona me kahi hoʻolālā paʻakikī e hana i kahi nīnau hope me kahi ʻano hoʻokō paʻakikī a suboptimal.

Nā Pōmaikaʻi Nui o ka hoʻohana ʻana i nā hana papa ma Nā nīnau LINQ:

  1. ʻO ka hiki, e like me ke ʻano o nā manaʻo, e hoʻohana ʻia a kuhikuhi ʻia ma ke ʻano he mea, akā hiki iā ʻoe ke hāʻawi i kahi hoʻonohonoho o nā ʻāpana hoʻokomo:
    MAI KA HANA(@param1, @param2 ...)
    ʻO ka hopena, hiki ke hoʻokō ʻia ka laʻana ʻikepili maʻalahi
  2. I ka hihia o ka hoʻohana ʻana i kahi hana papaʻaina, ʻaʻohe palena ikaika e like me ke ʻano o nā manaʻo kuhikuhi i hōʻike ʻia ma luna.
    1. Nā ʻōlelo aʻoaʻo papa:
      через LINQ ʻAʻole hiki iā ʻoe ke kuhikuhi i nā ʻōlelo kuhikuhi e hoʻohana ʻia a hoʻoholo i ka pae kaʻawale ʻikepili i ka wā e nīnau ai.
      Akā aia kēia mau mana i ka hana.
      Me ka hana, hiki iā ʻoe ke hoʻokō i kahi hoʻolālā noiʻi hoʻokō mau, kahi i wehewehe ʻia ai nā lula no ka hana ʻana me nā indexes a me nā pae kaʻawale ʻikepili.
    2. ʻO ka hoʻohana ʻana i ka hana e hiki ai, ke hoʻohālikelike ʻia me nā manaʻo i kuhikuhi ʻia, e loaʻa:
      • ʻO ka loina sampling data paʻakikī (me ka hoʻohana ʻana i nā puka lou)
      • kiʻi ʻikepili mai nā papa ʻokoʻa he nui
      • i ka hoʻohana 'ana o UNION и OLELO HOOLAHA

  3. Hāʻawi ʻO OPTION pono loa inā pono mākou e hāʻawi i ka mana concurrency KOHO (MAXDOP N), ka hoʻonohonoho o ka hoʻolālā hoʻokō nīnau. ʻo kahi laʻana:
    • hiki iā ʻoe ke kuhikuhi i ka hana hou ʻana o ka hoʻolālā nīnau KOHO (RECOMPILE)
    • hiki iā ʻoe ke kuhikuhi inā e koi ʻia ka hoʻolālā nīnau e hoʻohana i ke kauoha hui i kuhikuhi ʻia i ka nīnau KOHO (FORCE ORDER)

    Nā kikoʻī hou aku e pili ana ʻO OPTION wehewehe ʻia maanei.

  4. Ke hoʻohana nei i ka ʻāpana ʻikepili haiki a koi loa:
    ʻAʻohe pono e mālama i nā pūʻulu ʻikepili nui i loko o nā caches (e like me ke ʻano me nā manaʻo i kuhikuhi ʻia), kahi e pono ai ʻoe e kānana i ka ʻikepili ma ke ʻano.
    Eia kekahi laʻana, aia kahi papaʻaina nona kāna kānana kahi ʻekolu mau kahua i hoʻohana ʻia (a, b, c).

    Ma keʻano maʻamau, he kūlana mau nā nīnau a pau a = 0 a me b = 0.

    Eia naʻe, ke noi no ke kahua c hoololi hou aku.

    E ʻae ke kūlana a = 0 a me b = 0 He mea kōkua maoli iā mākou e kaupalena i ka hopena i makemake ʻia i hoʻonohonoho ʻia i nā kaukani o nā moʻolelo, akā ʻo ke kūlana с hōʻemi i ke koho ʻana i hoʻokahi haneli moʻolelo.

    Maanei paha he koho maikaʻi loa ka hana papaʻaina.

    Eia kekahi, ʻoi aku ka wānana a paʻa i ka hana papaʻaina i ka manawa hoʻokō.

examples

E nānā kākou i ka hoʻokō laʻana me ka hoʻohana ʻana i ka waihona Nīnau ma ke ʻano he laʻana.

Aia kahi noi koho i, ka mea e hoʻohui i kekahi mau papa a hoʻohana i hoʻokahi nānā (OperativeQuestions), kahi e nānā ʻia ai ka pilina ma ka leka uila (ma o OLELO HOOLAHA) i “Nīnau Operative”:

Noi 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])
));

He ʻano paʻakikī ka ʻike: loaʻa iā ia nā subquery hui a hoʻohana i ka hoʻokaʻawale Hoʻoponopono, ka mea ma ka laulā he hana pono waiwai.

ʻO kahi laʻana mai OperativeQuestions ma kahi o ʻumi tausani mau moʻolelo.

ʻO ka pilikia nui me kēia nīnau, ʻo ia no nā moʻolelo mai ka nīnau waho, ua hoʻokō ʻia kahi subquery kūloko ma ka ʻike [OperativeQuestions]. OLELO HOOLAHA) a hiki i nā haneli mau moʻolelo.

A me he mea lā e helu ka subquery i nā moʻolelo i hoʻokahi manawa e [Email] = @p__linq__0, a laila e hoʻopili ʻia kēia mau haneli mau moʻolelo e Id me nā nīnau, a wikiwiki ka nīnau.

ʻOiaʻiʻo, aia kahi pilina pili o nā papa a pau: nānā i ka pili o nā nīnau Id me Id mai OperativeQuestions, a me ke kānana ʻana ma ka leka uila.

ʻOiaʻiʻo, hana ka noi me nā ʻumi tausani o nā moʻolelo OperativeQuestions, akā pono wale ka ʻikepili o ka hoihoi ma o ka leka uila.

Nānā i nā kikokikona OperativeNīnau:

Noi 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));

Palapala 'ike mua ma 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");
    }
}

Nīnau LINQ mua

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();

I kēia hihia kūikawā, ke noʻonoʻo nei mākou i kahi hoʻonā i kēia pilikia me ka ʻole o ka hoʻololi ʻana i ka ʻenehana, me ka ʻole o ka hoʻokomo ʻana i kahi papaʻaina ʻokoʻa me nā hopena i hoʻomākaukau ʻia ("Nīnau Hana"), kahi e koi ai i kahi mīkini no ka hoʻopiha ʻana me ka ʻikepili a mālama ʻia i kēia lā .

ʻOiai he hopena maikaʻi kēia, aia kekahi koho ʻē aʻe e hoʻoponopono i kēia pilikia.

ʻO ke kumu nui, ʻo ia ka hoʻopaʻa ʻana i nā mea hoʻokomo e [Email] = @p__linq__0 mai ka ʻike OperativeQuestions.

E hoʻokomo i ka hana papaʻaina [dbo].[OperativeQuestionsUserMail] i loko o ka waihona.

Ma ka hoʻouna ʻana i ka leka uila ma ke ʻano he helu hoʻokomo, loaʻa iā mākou kahi papa o nā waiwai:

Noi 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

Hoʻihoʻi kēia i kahi papa o nā waiwai me kahi hoʻolālā data i koho mua ʻia.

I mea e ʻoi aku ka maikaʻi o nā nīnau iā OperativeQuestionsUserMail a loaʻa i nā hoʻolālā noiʻi maikaʻi loa, pono ke ʻano koʻikoʻi, ʻaʻole HO'I PAPA IA HO'I...

I kēia hihia, ua hoʻololi ʻia ka nīnau noiʻi 1 i ka nīnau 4:

Noi 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]);

Ka palapala ʻāina i nā manaʻo a me nā hana ma 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})");
}

Nīnau LINQ hope

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();

Ua hāʻule ke kauoha o ka manawa hoʻokō mai 200-800 ms, i 2-20 ms, etc., ʻo ia hoʻi he ʻumi mau manawa wikiwiki.

Inā mākou e lawe i ka awelika, a laila ma kahi o 350 ms ua loaʻa iā mākou he 8 ms.

Mai nā pōmaikaʻi maopopo loa e loaʻa iā mākou:

  1. hoemi nui i ka haawe heluhelu,
  2. ka ho'ēmi nui i ka likelihood o ka ālai
  3. e hoemi ana i ka awelika manawa pa'a i na waiwai kupono

hopena

ʻO ka hoʻonui a me ka hoʻoponopono maikaʻi ʻana i nā kelepona ʻikepili MS SQL через LINQ he pilikia hiki ke hoʻoponopono ʻia.

He mea koʻikoʻi ka noʻonoʻo a me ka paʻa i kēia hana.

I ka hoʻomaka ʻana o ke kaʻina hana:

  1. pono e nānā i ka ʻikepili kahi e hana ai ka noi (nā waiwai, nā ʻano ʻikepili i koho ʻia)
  2. e hoʻokō pono i ka kuhikuhi ʻana i kēia ʻikepili
  3. e nānā i ka pololei o ka hoʻohui ʻana ma waena o nā papa

Hōʻike ʻia ka ʻike hoʻoponopono hou aʻe:

  1. kumu o ka noi a wehewehe i ka kānana noi nui
  2. ka hana hou ʻana i nā poloka nīnau like a me ka nānā ʻana i ka hui ʻana o nā kūlana
  3. ma SSMS a i ʻole GUI ʻē aʻe no Pūnaehana SQL optimizes ia iho Nīnau SQL (ka hoʻokaʻawale ʻana i kahi waihona ʻikepili waena, kūkulu i ka hopena hulina me ka hoʻohana ʻana i kēia waihona (he nui paha))
  4. i ka pae hope, e lawe ana i kumu i ka hopena Nīnau SQL, ke kūkulu hou ʻia nei ka hale Nīnau LINQ

ʻO ka hopena Nīnau LINQ pono e like ke ano me ka mea maikai i ikeia Nīnau SQL mai ka helu 3.

Mahalo

Mahalo nui i nā hoa hana hana и alex_ozr mai ka hui ʻO Fortis no ke kokua ana i ka hoomakaukau ana i keia mea.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka