Uchishandisa yakatetepa uye inonyanya kudiwa data chidimbu:
Iko hakuna chikonzero chekuchengeta yakakura data seti mumacache (sezvazvakaita ne indexed maonero), kubva kwauchiri kuda kusefa data neparameter.
Semuenzaniso, pane tafura ine sefa WHERE minda mitatu inoshandiswa (a,b,c).
Conventionally, zvikumbiro zvose ane anogara mamiriro a = 0 uye b = 0.
Zvisinei, chikumbiro chemunda c zvimwe zvakasiyana.
Rega mamiriro acho a = 0 uye b = 0 Zvinonyatso kutibatsira kudzikamisa zvinodiwa zvinokonzeresa kuzviuru zvemarekodhi, asi mamiriro aripo Ρ inoderedza kusarudzwa kusvika kuzana rekodhi.
Pano basa retafura rinogona kunge riri sarudzo iri nani.
Zvakare, basa retafura rinonyanya kufanotaura uye rinoenderana munguva yekuuraya.
(@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])
));
Dambudziko guru nemubvunzo uyu nderekuti kune marekodhi kubva kumubvunzo wekunze, subquery yemukati inoitwa pa[OperativeQuestions] maonero, ayo anofanirwa ku [Email] = @p__linq__0 kutibvumira kudzikamisa sarudzo yekubuda (kuburikidza VAPO) kusvika kumazana ezvinyorwa.
Uye zvingaite sekuti subquery inofanira kuverenga marekodhi kamwe chete ne [Email] = @p__linq__0, uyezve aya mazana marekodhi anofanirwa kubatana neId neMibvunzo, uye mubvunzo uchakurumidza.
Muchokwadi, kune inoteedzana yekubatanidza yematafura ese: kutarisa kunyoreswa kweId Mibvunzo neId kubva kuOperativeQuestions, uye kusefa neEmail.
Muchokwadi, chikumbiro chinoshanda nemakumi ezviuru zveOperativeQuestions marekodhi, asi chete iyo data yekufarira inodiwa kuburikidza neEmail.
OperativeQuestions ona mavara:
Chikumbiro Nha
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));
Yekutanga kuona mepu muDbContext (EF Core 2)
public class QuestionsDbContext : DbContext
{
//...
public DbQuery<OperativeQuestion> OperativeQuestions { get; set; }
//...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Query<OperativeQuestion>().ToView("OperativeQuestions");
}
}
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
Izvi zvinodzosa tafura yezvakakosha ine predefined data chimiro.
(@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]);
Mepu maonero uye mabasa muDbContext (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})");
}
muSSMS kana imwe GUI ye SQL Server inozvinatsiridza SQL mubvunzo (kugovera yepakati data kuchengetedza, kuvaka mhedzisiro yemubvunzo uchishandisa iyi yekuchengetedza (panogona kunge paine akati wandei))