কেবলমাত্র মন্তব্যে পরীক্ষামূলক অনুসন্ধানগুলির সংক্ষিপ্তসার হিসাবে এটি মনে হয় এমন প্রান্তের ঘটনা যা ঘটে যখন আপনার একই টেবিলে দুটি গণিত কলাম থাকে, এক persisted
এবং একটি স্থির থাকে না এবং তাদের উভয়েরই একই সংজ্ঞা থাকে।
ক্যোয়ারির পরিকল্পনায়
SELECT id5p
FROM dbo.persist_test;
টেবিল স্ক্যানটি persist_test
কেবলমাত্র id
কলামকে সরিয়ে দেয়। পরবর্তী সংখ্যার স্কেলারটি গুণ করে যেটি 5 করে এবং id5
এই কলামটি ক্যোয়ারীতেও রেফারেন্স না থাকা সত্ত্বেও ডাকা একটি কলাম আউটপুট করে। চূড়ান্ত গণনা স্কেলার বরাবর id5
একটি কলাম হিসাবে ডাকা মান এবং আউটপুট গ্রহণ করে id5p
।
কোয়েরি অপ্টিমাইজার ডিপ ডাইভ - পার্ট 2 (অস্বীকৃতি: এই ট্রেস ফ্ল্যাগগুলি অননুমোদিত / অসমর্থিত) এ ব্যাখ্যা করা ট্রেস ফ্ল্যাগগুলি ব্যবহার করে এবং ক্যোয়ারীটি দেখছেন
SELECT id5,
id5p,
( id * 5 )
FROM dbo.persist_test
OPTION (QUERYTRACEON 3604, QUERYTRACEON 8606);
আউটপুট দেয়
প্রকল্পের সাধারণকরণের আগে গাছ
LogOp_Project
LogOp_Get TBL: dbo.persist_test dbo.persist_test TableID=1717581157 TableReferenceID=0 IsRow: COL: IsBaseRow1002
AncOp_PrjList
AncOp_PrjEl QCOL: [tempdb].[dbo].[persist_test].id5
ScaOp_Arithmetic x_aopMult
ScaOp_Identifier QCOL: [tempdb].[dbo].[persist_test].id
ScaOp_Const TI(int,ML=4) XVAR(int,Not Owned,Value=5)
AncOp_PrjEl QCOL: [tempdb].[dbo].[persist_test].id5p
ScaOp_Arithmetic x_aopMult
ScaOp_Identifier QCOL: [tempdb].[dbo].[persist_test].id
ScaOp_Const TI(int,ML=4) XVAR(int,Not Owned,Value=5)
AncOp_PrjEl COL: Expr1004
ScaOp_Arithmetic x_aopMult
ScaOp_Identifier QCOL: [tempdb].[dbo].[persist_test].id
ScaOp_Const TI(int,ML=4) XVAR(int,Not Owned,Value=5)
প্রকল্প নরমালাইজেশন পরে গাছ
LogOp_Project
LogOp_Get TBL: dbo.persist_test dbo.persist_test TableID=1717581157 TableReferenceID=0 IsRow: COL: IsBaseRow1002
AncOp_PrjList
AncOp_PrjEl QCOL: [tempdb].[dbo].[persist_test].id5
ScaOp_Identifier QCOL: [tempdb].[dbo].[persist_test].id5
AncOp_PrjEl QCOL: [tempdb].[dbo].[persist_test].id5p
ScaOp_Identifier QCOL: [tempdb].[dbo].[persist_test].id5
AncOp_PrjEl COL: Expr1004
ScaOp_Identifier QCOL: [tempdb].[dbo].[persist_test].id5
সুতরাং দেখা যাচ্ছে যে সমস্ত গণিত কলামের সংজ্ঞাগুলি প্রসারিত হয়ে প্রজেক্ট নরমালাইজেশন পর্যায়ে সমস্ত অভিন্ন এক্সপ্রেশনগুলি গণিত কলামগুলির সাথে ফিরে মিলছে id5
এবং এই ক্ষেত্রে এটি কেবল মিলবে । অর্থাৎ এটি persisted
কলামকে কোনও পছন্দ দেয় না ।
নিম্নলিখিত সংজ্ঞা দিয়ে যদি সারণিটি পুনরায় তৈরি করা হয়
CREATE TABLE dbo.persist_test (
id INT NOT NULL
, id5p AS (5 * id) PERSISTED
, id5 AS (5 * id)
);
তারপরে id5
অথবা অনুরোধটি id5p
রানটাইমের সময় গণনা না করে তথ্যের অবিচ্ছিন্ন সংস্করণটি পড়ে সন্তুষ্ট হবে যাতে কলাম ক্রমে ম্যাচটি দেখা যায় (কমপক্ষে এই ক্ষেত্রে) প্রদর্শিত হবে।
[tempdb].[dbo].[persist_test].id
এবং এটি স্থির থাকা সত্ত্বেও মান গণনা করে।