আমি কেন ভারচারে ইন / স্মলিন্টের অন্তর্নিহিত রূপান্তর পাচ্ছি, এবং এটি কি সত্যিকারের কার্ডিনালিটির অনুমানকে প্রভাবিত করছে?


11

প্রকৃত বাস্তবায়ন পরিকল্পনায় শো প্ল্যান অ্যানালাইসিস (এসএসএমএস) ব্যবহার করে একটি ধীর পারফরম্যান্স ক্যোয়ারী শ্যুট করতে আমি চেষ্টা করছি। বিশ্লেষণ সরঞ্জামটি উল্লেখ করে যে সারি সংখ্যার জন্য অনুমান করা পরিকল্পনার কয়েকটি স্থানে প্রত্যাবর্তিত ফলাফল থেকে বন্ধ রয়েছে এবং আরও আমাকে কিছু সংক্রামিত রূপান্তর সতর্কতা দেয়।

আমি বর্ণের সাথে অন্তর্নির্মিত এই অন্তর্নিহিত রূপান্তরগুলি বুঝতে পারি না - উল্লেখ করা ক্ষেত্রগুলি ক্যোয়ারির কোনও পরামিতি / ফিল্টারের অংশ নয় এবং কলামের ডেটা সম্পর্কিত সমস্ত সারণীতে একই রয়েছে:

আমি নীচে কার্ডিনালিটিসিমিটি সতর্কতা পেয়েছি:

মতপ্রকাশে রূপান্তর টাইপ করুন (CONVERT_IMPLICIT (বারচর (12), [সিসিডি]। [প্রোফাইলিড], 0)) ক্যোয়ারী পরিকল্পনার পছন্দে "কার্ডিনালাইটিসিমিটি" প্রভাবিত করতে পারে - এই ক্ষেত্রটি আমার ডিবিতে সর্বত্রই পূর্ণসংখ্যা

মতপ্রকাশে রূপান্তর টাইপ করুন (CONVERT_IMPLICIT (বারচর (6), [সিসিডি]। [নোডাইড], 0)) ক্যোয়ারী পরিকল্পনার পছন্দে "কার্ডিনালাইটিসিমিটি" প্রভাবিত করতে পারে - এই ক্ষেত্রটি আমার ডিবিতে সর্বত্রই একটি ছোট্ট

মতপ্রকাশে রূপান্তর টাইপ করুন (CONVERT_IMPLICIT (বারচর (6), [সিসিডি]। [সেশনসেকনাম], 0)) ক্যোয়ারী পরিকল্পনার পছন্দে "কার্ডিনালিটিসটিটিমেট" প্রভাবিত করতে পারে - এই ক্ষেত্রটি আমার ডিবিতে সর্বত্রই একটি ছোট্ট

মতপ্রকাশে রূপান্তর টাইপ করুন (CONVERT_IMPLICIT (বারচর (41), [সিসিডি]। [সেশনিড], 0)) ক্যোয়ারী পরিকল্পনার পছন্দে "কার্ডিনালিটিসেমিটিকে" প্রভাবিত করতে পারে - এই ক্ষেত্রটি আমার ডিবিতে সর্বত্র দশমিক

[সম্পাদনা] এখানে রেফারেন্সের জন্য কোয়েরি এবং প্রকৃত বাস্তবায়ন পরিকল্পনাটি https://www.brentozar.com/pastetheplan/?id=SysYt0NzN

এবং টেবিল সংজ্ঞা ..

/****** Object:  Table [dbo].[agentconnectiondetail]    Script Date: 1/10/2019 9:10:04 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[agentconnectiondetail](
    [sessionid] [decimal](18, 0) NOT NULL,
    [sessionseqnum] [smallint] NOT NULL,
    [nodeid] [smallint] NOT NULL,
    [profileid] [int] NOT NULL,
    [resourceid] [int] NOT NULL,
    [startdatetime] [datetime2](7) NOT NULL,
    [enddatetime] [datetime2](7) NOT NULL,
    [qindex] [smallint] NOT NULL,
    [gmtoffset] [smallint] NOT NULL,
    [ringtime] [smallint] NULL,
    [talktime] [smallint] NULL,
    [holdtime] [smallint] NULL,
    [worktime] [smallint] NULL,
    [callwrapupdata] [varchar](40) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [callresult] [smallint] NULL,
    [dialinglistid] [int] NULL,
    [convertedStartDatetimelocal] [datetime2](7) NULL,
    [convertedEndDatetimelocal] [datetime2](7) NULL,
 CONSTRAINT [PK_agentconnectiondetail] PRIMARY KEY CLUSTERED 
(
    [sessionid] ASC,
    [sessionseqnum] ASC,
    [nodeid] ASC,
    [profileid] ASC,
    [resourceid] ASC,
    [startdatetime] ASC,
    [qindex] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[contactcalldetail]    Script Date: 1/10/2019 9:10:04 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[contactcalldetail](
    [sessionid] [decimal](18, 0) NOT NULL,
    [sessionseqnum] [smallint] NOT NULL,
    [nodeid] [smallint] NOT NULL,
    [profileid] [int] NOT NULL,
    [contacttype] [smallint] NOT NULL,
    [contactTypeDescription] [varchar](20) COLLATE Latin1_General_CI_AS NULL,
    [contactdisposition] [smallint] NOT NULL,
    [contactdispositionDescription] [varchar](20) COLLATE Latin1_General_CI_AS NULL,
    [dispositionreason] [varchar](100) COLLATE Latin1_General_CI_AS NULL,
    [originatortype] [smallint] NOT NULL,
    [originatorTypeDescription] [varchar](20) COLLATE Latin1_General_CI_AS NULL,
    [originatorid] [int] NULL,
    [originatordn] [varchar](30) COLLATE Latin1_General_CI_AS NULL,
    [destinationtype] [smallint] NULL,
    [destinationTypeDescription] [varchar](20) COLLATE Latin1_General_CI_AS NULL,
    [destinationid] [int] NULL,
    [destinationdn] [varchar](30) COLLATE Latin1_General_CI_AS NULL,
    [startdatetimeUTC] [datetime2](7) NOT NULL,
    [enddatetimeUTC] [datetime2](7) NOT NULL,
    [gmtoffset] [smallint] NOT NULL,
    [callednumber] [varchar](30) COLLATE Latin1_General_CI_AS NULL,
    [origcallednumber] [varchar](30) COLLATE Latin1_General_CI_AS NULL,
    [applicationtaskid] [decimal](18, 0) NULL,
    [applicationid] [int] NULL,
    [applicationname] [varchar](30) COLLATE Latin1_General_CI_AS NULL,
    [connecttime] [smallint] NULL,
    [customvariable1] [varchar](40) COLLATE Latin1_General_CI_AS NULL,
    [customvariable2] [varchar](40) COLLATE Latin1_General_CI_AS NULL,
    [customvariable3] [varchar](40) COLLATE Latin1_General_CI_AS NULL,
    [customvariable4] [varchar](40) COLLATE Latin1_General_CI_AS NULL,
    [customvariable5] [varchar](40) COLLATE Latin1_General_CI_AS NULL,
    [customvariable6] [varchar](40) COLLATE Latin1_General_CI_AS NULL,
    [customvariable7] [varchar](40) COLLATE Latin1_General_CI_AS NULL,
    [customvariable8] [varchar](40) COLLATE Latin1_General_CI_AS NULL,
    [customvariable9] [varchar](40) COLLATE Latin1_General_CI_AS NULL,
    [customvariable10] [varchar](40) COLLATE Latin1_General_CI_AS NULL,
    [accountnumber] [varchar](40) COLLATE Latin1_General_CI_AS NULL,
    [callerentereddigits] [varchar](40) COLLATE Latin1_General_CI_AS NULL,
    [badcalltag] [char](1) COLLATE Latin1_General_CI_AS NULL,
    [transfer] [bit] NULL,
    [NextSeqNum] [smallint] NULL,
    [redirect] [bit] NULL,
    [conference] [bit] NULL,
    [flowout] [bit] NULL,
    [metservicelevel] [bit] NULL,
    [campaignid] [int] NULL,
    [origprotocolcallref] [varchar](32) COLLATE Latin1_General_CI_AS NULL,
    [destprotocolcallref] [varchar](32) COLLATE Latin1_General_CI_AS NULL,
    [convertedStartDatetimelocal] [datetime2](7) NULL,
    [convertedEndDatetimelocal] [datetime2](7) NULL,
    [AltKey]  AS (concat([sessionid],[sessionseqnum],[nodeid],[profileid]) collate database_default) PERSISTED NOT NULL,
    [PrvSeqNum] [smallint] NULL,
 CONSTRAINT [PK_contactcalldetail] PRIMARY KEY CLUSTERED 
(
    [sessionid] ASC,
    [sessionseqnum] ASC,
    [nodeid] ASC,
    [profileid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[contactqueuedetail]    Script Date: 1/10/2019 9:10:04 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[contactqueuedetail](
    [sessionid] [decimal](18, 0) NOT NULL,
    [sessionseqnum] [smallint] NOT NULL,
    [profileid] [int] NOT NULL,
    [nodeid] [smallint] NOT NULL,
    [targetid] [int] NOT NULL,
    [targettype] [smallint] NOT NULL,
    [targetTypeDescription] [varchar](10) COLLATE Latin1_General_CI_AS NULL,
    [qindex] [smallint] NOT NULL,
    [queueorder] [smallint] NOT NULL,
    [disposition] [smallint] NULL,
    [dispositionDescription] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
    [metservicelevel] [bit] NULL,
    [queuetime] [smallint] NULL,
 CONSTRAINT [PK_contactqueuedetail] PRIMARY KEY CLUSTERED 
(
    [sessionid] ASC,
    [sessionseqnum] ASC,
    [profileid] ASC,
    [nodeid] ASC,
    [targetid] ASC,
    [targettype] ASC,
    [qindex] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Index [<Name of Missing Index, sysname,>]    Script Date: 1/10/2019 9:10:04 AM ******/
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[contactcalldetail]
(
    [convertedStartDatetimelocal] ASC
)
INCLUDE (   [sessionid],
    [sessionseqnum],
    [nodeid],
    [profileid]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
/****** Object:  Index [idx_CCD_ContactType_DestType_StDtLocal]    Script Date: 1/10/2019 9:10:04 AM ******/
CREATE NONCLUSTERED INDEX [idx_CCD_ContactType_DestType_StDtLocal] ON [dbo].[contactcalldetail]
(
    [destinationtype] ASC,
    [contacttype] ASC,
    [convertedStartDatetimelocal] ASC
)
INCLUDE (   [sessionid],
    [sessionseqnum],
    [nodeid],
    [profileid],
    [convertedEndDatetimelocal]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object:  Index [idx_CQD_Profile_Traget_TargetType]    Script Date: 1/10/2019 9:10:04 AM ******/
CREATE NONCLUSTERED INDEX [idx_CQD_Profile_Traget_TargetType] ON [dbo].[contactqueuedetail]
(
    [profileid] ASC,
    [targetid] ASC,
    [targettype] ASC
)
INCLUDE (   [targetTypeDescription],
    [queueorder],
    [disposition],
    [dispositionDescription],
    [queuetime]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

উত্তর:


11

অন্তর্নিহিত রূপান্তরগুলি গণিত কলাম দ্বারা সৃষ্ট AltKey:

CREATE TABLE dbo.Test
(
    [sessionid] [decimal](18, 0) NOT NULL,
    [sessionseqnum] [smallint] NOT NULL,
    [nodeid] [smallint] NOT NULL,
    [profileid] [int] NOT NULL,
    [AltKey] AS 
        CONCAT
        (
            [sessionid],
            [sessionseqnum],
            [nodeid],
            [profileid]
        ) PERSISTED NOT NULL,
);

উপরের সরলীকৃত টেবিলটি দেওয়া, নীচের সরল বিবৃতিটি প্রশ্নের মধ্যে একই রকম অন্তর্নিহিত রূপান্তর সতর্কতা উত্পন্ন করে:

SELECT T.*
FROM dbo.Test AS T;

সতর্কতা সহ পরিকল্পনা করুন

ডকুমেন্টেশন থেকে (জোর দেওয়া):

CONCAT স্পষ্টতই সমস্ত যুক্তি যুক্তিযুক্তকরণের আগে স্ট্রিং প্রকারে রূপান্তরিত করে

সতর্কতা যুক্ত করা হয় যখন এসকিউএল সার্ভার এমন পরিকল্পনার বিকল্প বিবেচনা করে যা স্থির মানটি ব্যবহার করে না, তবে মানটি স্পষ্টভাবে গণনা করে। চূড়ান্ত পরিকল্পনাটি যদি স্থায়ী মান ব্যবহার করে তবে সতর্কতা সরানো হবে না।

এই ক্ষেত্রে সতর্কতাগুলি নিরাপদে উপেক্ষা করা যেতে পারে। এটি আপনার কার্যকর করার পরিকল্পনার ক্ষেত্রেও প্রযোজ্য, যতদূর আমি বলতে পারি - এর সাথে জড়িত অন্তর্নিহিত রূপান্তরগুলি CONCATপরিকল্পনার পছন্দকে বিরূপ প্রভাবিত করছে না।

অননুমোদিত এবং অসমর্থিত ট্রেস পতাকা 176 ব্যবহার করা স্থির গণিত কলামের প্রসারকে বাধা দেয় এবং সতর্কতাগুলি সরিয়ে দেয়:

SELECT * 
FROM dbo.Test AS T
OPTION (QUERYTRACEON 176);

tf 176 এর সাথে

আরও তথ্যের জন্য আমার নিবন্ধটি যথাযথভাবে বিশিষ্ট গণিত কলামগুলি দেখুন।


5

এই ক্ষেত্রগুলি সম্পর্কে আপনি নিখুঁত রূপান্তর সতর্কতা পেয়ে যাচ্ছেন:

  • [ccd].[profileid] (বার্চর অবধি (12))
  • [ccd].[nodeid] (ছোট সংস্করণ থেকে বারচর (6))
  • [ccd].[sessionseqnum] (ছোট সংস্করণ থেকে বারচর (6))
  • [ccd].[sessionid] (বর্ণাচর দশমিক (41))

উল্লেখ করা ক্ষেত্রগুলি কোয়েরিতে কোনও পরামিতি / ফিল্টারের অংশ নয়

নিশ্চিত যে তারা আপনার যোগদানের শর্তে। এখানে ccd.profileid ফিল্টার হিসাবে ব্যবহার করা হচ্ছে (পাশাপাশি এজেন্টক্লেকশনডেটেল যোগ করতে):

FROM contactcalldetail ccd 
    INNER JOIN contactqueuedetail csqd 
        ON ccd.sessionID=csqd.sessionid 
            AND ccd.sessionSeqNum=csqd.sessionSeqNum 
            AND ccd.nodeID=csqd.nodeID 
            AND ccd.profileid=csqd.profileid -- Right here

এবং জড়িত সমস্ত টেবিলগুলিতে কলামের ডেটা প্রকারগুলি একই

আপনি সারণির সংজ্ঞাটি ডাবল করতে চান

  • contactcalldetail.profileid
  • contactqueuedetail.profileid
  • agentconnectiondetail .profileid

দেখে মনে হচ্ছে যে তারা যে ধরণের ডেটা ব্যবহার করে যা আপনার মনে হয় তারা ব্যবহার করছে।

এবং এটি কি সত্যিকারের কার্ডিনালিটির অনুমানকে প্রভাবিত করছে?

আপনার দেওয়া তথ্যের ভিত্তিতে আমার উত্তরে কিছু অনুমানের কাজ চলছে। আমি আপনাকে আপনার প্রশ্নের প্রকৃত বাস্তবায়ন পরিকল্পনা এবং সারণী সংজ্ঞা যুক্ত করতে উত্সাহিত করি যাতে আমাদের জড়িত সমস্ত বিবরণ থাকতে পারে যা এই অন্তর্নিহিত রূপান্তর সমস্যার মধ্যে খেলতে পারে।

সাধারণভাবে, যোগদানের শর্তে অন্তর্নিহিত রূপান্তর অনুমান সহ গুরুতর সমস্যা সৃষ্টি করতে পারে । প্রকৃত বাস্তবায়ন পরিকল্পনা না দেখে আপনার ক্ষেত্রে এটি ঘটছে কিনা তা বলা শক্ত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.