গণিত কলামে ফিল্টার সূচক তৈরি করতে অক্ষম


18

আমার আগের প্রশ্নে, কোনও টেবিলে নতুন গণনাকৃত কলাম যুক্ত করার সময় লক এসক্লেশন অক্ষম করা কি ভাল ধারণা? , আমি একটি গণিত কলাম তৈরি করছি:

ALTER TABLE dbo.tblBGiftVoucherItem
ADD isUsGift AS CAST
(
    ISNULL(
        CASE WHEN sintMarketID = 2 
            AND strType = 'CARD'
            AND strTier1 LIKE 'GG%' 
        THEN 1 
        ELSE 0 
        END
    , 0) 
    AS BIT
) PERSISTED;

গণনাকৃত কলামটি হ'ল PERSISTED, এবং গণনা_কলাম_ডিফিনেশন (লেনদেন-এসকিউএল) অনুসারে :

চলতে থাকে

সুনির্দিষ্ট করে যে ডাটাবেস ইঞ্জিন টেবিলে গণিত মানগুলি শারীরিকভাবে সংরক্ষণ করবে এবং যখন কোনও অন্যান্য কলাম যার উপর ভিত্তি করে গণিত কলামটি আপডেট করা হবে আপডেট করবে। একটি গণিত কলামটিকে PERSISTED হিসাবে চিহ্নিত করে নিরঙ্কুশক, তবে সুনির্দিষ্ট নয় এমন একটি গণিত কলামে একটি সূচি তৈরি করা যায়। আরও তথ্যের জন্য, গণিত কলামে সূচিগুলি দেখুন। পার্টিশনযুক্ত টেবিলের পার্টিশন কলাম হিসাবে ব্যবহৃত কোনও গণিত কলামগুলি অবশ্যই স্পষ্টভাবে চিহ্নিত করা উচিত গণনা_ক্লম_এক্সপ্রেসন অবশ্যই PERSISTED নির্দিষ্ট করা হলে অবশ্যই ডিস্ট্রিমেন্টিক হতে হবে।

কিন্তু যখন আমি আমার কলামে একটি সূচক তৈরি করার চেষ্টা করি তখন আমি নিম্নলিখিত ত্রুটিটি পাই:

CREATE INDEX FIX_tblBGiftVoucherItem_incl
ON dbo.tblBGiftVoucherItem (strItemNo) 
INCLUDE (strTier3)
WHERE isUsGift = 1;

ফিল্টারড সূচক 'FIX_tblBGiftVoucherItem_incl' টেবিল 'dbo.tblBGiftVoucherItem' এ তৈরি করা যায় না কারণ ফিল্টার এক্সপ্রেশনতে কলাম 'isUsGift' একটি গণিত কলাম। ফিল্টার এক্সপ্রেশনটি পুনরায় লিখুন যাতে এটিতে এই কলামটি অন্তর্ভুক্ত না হয়।

আমি একটি গণনামূলক কলামে ফিল্টারড সূচকটি কীভাবে তৈরি করতে পারি?

অথবা

বিকল্প সমাধান আছে কি?


3
আপনি WHERE (sintMarketID = 2 AND strType = 'CARD' AND strTier1 LIKE 'GG%')যদিও ফিল্টার সূচক তৈরি করতে পারেন ।
ypercubeᵀᴹ

উত্তর:


21

দুর্ভাগ্যক্রমে এসকিউএল সার্ভার ২০১৪ হিসাবে, Filtered Indexফিল্টারটি একটি গণনা কলামে রয়েছে এমন কোনও জায়গা তৈরি করার ক্ষমতা নেই (তা বজায় থাকুক বা না থাকুক)।

২০০৯ সাল থেকে একটি কানেক্ট আইটেম খোলা রয়েছে, সুতরাং দয়া করে এগিয়ে যান এবং এটির জন্য ভোট দিন। মাইক্রোসফ্ট এটি একদিন ঠিক করবে।

অ্যারন বারট্রান্ডের একটি নিবন্ধ রয়েছে যা ফিল্টারড সূচীগুলির সাথে অন্যান্য অনেকগুলি বিষয়কে কভার করে ।


21

যদিও আপনি অবিরাম কলামে একটি ফিল্টারড সূচক তৈরি করতে পারবেন না, তবে আপনি ব্যবহার করতে সক্ষম হতে পারেন এমন একটি মোটামুটি সহজ কাজ রয়েছে।

পরীক্ষা হিসাবে, আমি একটি IDENTITYকলাম সহ একটি সাধারণ টেবিল এবং পরিচয় কলামের উপর ভিত্তি করে একটি অবিরাম গণিত কলাম তৈরি করেছি:

USE tempdb;

CREATE TABLE dbo.PersistedViewTest
(
    PersistedViewTest_ID INT NOT NULL
        CONSTRAINT PK_PersistedViewTest
        PRIMARY KEY CLUSTERED
        IDENTITY(1,1)
    , SomeData VARCHAR(2000) NOT NULL
    , TestComputedColumn AS (PersistedViewTest_ID - 1) PERSISTED
);
GO

তারপরে, আমি গণনা কলামে একটি ফিল্টার সহ টেবিলের উপর ভিত্তি করে স্কিমা-সীমাবদ্ধ দৃশ্য তৈরি করেছি:

CREATE VIEW dbo.PersistedViewTest_View
WITH SCHEMABINDING
AS
SELECT PersistedViewTest_ID
    , SomeData 
    , TestComputedColumn
FROM dbo.PersistedViewTest
WHERE TestComputedColumn < CONVERT(INT, 27);

এর পরে, আমি স্কিমা-বাউন্ড ভিউতে একটি ক্লাস্টার ইনডেক্স তৈরি করেছি, যা গণিত কলামের মান সহ ভিউতে সঞ্চিত মানগুলি বজায় রাখার প্রভাব রাখে:

CREATE UNIQUE CLUSTERED INDEX IX_PersistedViewTest
ON dbo.PersistedViewTest_View(PersistedViewTest_ID);
GO

টেবিলে কিছু পরীক্ষার ডেটা sertোকান:

INSERT INTO dbo.PersistedViewTest (SomeData)
SELECT o.name + o1.name + o2.name
FROM sys.objects o
    CROSS JOIN sys.objects o1
    CROSS JOIN sys.objects o2;

ভিউটিতে একটি পরিসংখ্যান আইটেম এবং একটি সূচক তৈরি করুন:

CREATE STATISTICS ST_PersistedViewTest_View
ON dbo.PersistedViewTest_View(TestComputedColumn)
WITH FULLSCAN;

CREATE INDEX IX_PersistedViewTest_View_TestComputedColumn
ON dbo.PersistedViewTest_View(TestComputedColumn);

পারফর্মিং SELECTচলতে কলাম সহ টেবিল বিরুদ্ধে বিবৃতি পারে এখন স্বয়ংক্রিয়ভাবে কোয়েরি অপটিমাইজার নির্ধারণ করে এটা জ্ঞান করে তোলে তা করার যদি, স্থায়ী দৃশ্য ব্যবহার করুন:

SELECT pv.PersistedViewTest_ID
    , pv.TestComputedColumn
FROM dbo.PersistedViewTest pv
WHERE pv.TestComputedColumn = CONVERT(INT, 26)

উপরের ক্যোয়ারির জন্য আসল বাস্তবায়ন পরিকল্পনায় ফলাফলটি ফেরত দেওয়ার জন্য অবিচলিত দৃষ্টিভঙ্গি ব্যবহার করার জন্য কোয়েরি অপ্টিমাইজারটি বেছে নেওয়া দেখায়:

এখানে চিত্র বর্ণনা লিখুন

আপনি WHEREউপরের ধারাটিতে সুস্পষ্ট রূপান্তরটি লক্ষ্য করেছেন । এই সুস্পষ্টভাবে CONVERT(INT, 26)ক্যোয়ারী অপ্টিমাইজারটি কোয়েরি দ্বারা প্রত্যাবর্তন করা হবে এমন সারিগুলির সংখ্যা অনুমান করার জন্য পরিসংখ্যান অবজেক্টটিকে সঠিকভাবে ব্যবহার করতে দেয়। যদি আমরা এর সাথে কোয়েরিটি লিখি WHERE pv.TestComputedColumn = 26, ক্যোরি অপ্টিমাইজার সঠিকভাবে সারিগুলির সংখ্যা অনুমান করতে পারে না যেহেতু 26 টি আসলে একটি হিসাবে বিবেচিত TINY INT; এটি এসকিউএল সার্ভারকে অবিচলিত দর্শনটি ব্যবহার না করার কারণ হতে পারে। অন্তর্নিহিত রূপান্তরগুলি খুব বেদনাদায়ক হতে পারে এবং এটি তুলনা এবং যোগদানের জন্য ধারাবাহিকভাবে সঠিক ডেটা ধরণের ব্যবহারের জন্য অর্থ প্রদান করে।

অবশ্যই, স্কিমা বন্ডিং ব্যবহারের ফলে প্রাপ্ত সমস্ত স্ট্যান্ডার্ড "গটচগুলি" উপরের দৃশ্যে প্রযোজ্য; এটি এই পরিস্থিতিতে সমস্ত পরিস্থিতিতে ব্যবহার বন্ধ করে দিতে পারে। উদাহরণস্বরূপ, প্রথমে ভিউ থেকে স্কিমা বন্ডিং অপসারণ না করে বেস টেবিলটি পরিবর্তন করা আর সম্ভব হবে না। এটি করার জন্য, আপনাকে ভিউ থেকে ক্লাস্টারড সূচকটি সরিয়ে ফেলতে হবে।

আপনার কাছে এসকিউএল সার্ভার এন্টারপ্রাইজ সংস্করণ না থাকলে, কোয়েরি অপ্টিমাইজারটি স্বয়ংক্রিয়ভাবে এমন প্রশ্নের জন্য স্থায়ী দৃষ্টিভঙ্গি ব্যবহার করবে না যা WITH (NOEXPAND)ইঙ্গিতটি ব্যবহার করে দৃশ্যের সরাসরি উল্লেখ করে না । অ-এন্টারপ্রাইজ সংস্করণ সংস্করণে অবিচলিত দৃষ্টিভঙ্গিটি ব্যবহার করার সুবিধাটি উপলব্ধি করতে আপনার উপরের ক্যোয়ারীটি আবার লিখতে হবে যেমন:

SELECT pv.PersistedViewTest_ID
    , pv.TestComputedColumn
FROM dbo.PersistedViewTest_View pv WITH (NOEXPAND)
WHERE pv.TestComputedColumn = CONVERT(INT, 26)

ধন্যবাদ ইয়ান Ringrose উপরে এন্টারপ্রাইজ এডিশন সীমাবদ্ধতা ইশারা, এবং জন্য পৌল হোয়াইট জন্য (NOEXPAND)ইঙ্গিত।

পলের এই উত্তরটিতে স্থির মতামতের বিষয়ে ক্যোরিয়াম অপ্টিমাইজার সম্পর্কে কিছু আকর্ষণীয় বিশদ রয়েছে।


চারপাশের কাজ দেখায় যে একটি ক্লাস্টারযুক্ত সূচক এবং একটি নন-ক্লাস্টার্ড সূচক উভয়ই ভিউতে তৈরি করা হয়েছে। ক্লাস্টারড ইনডেক্সের কারণে অবিচ্ছিন্ন সূচকটি কি কোনও কারণে ব্যবহার করতে হবে? বা, অবিচ্ছিন্ন সূচকটি আরও পারফর্ম্যান্ট? যদি ক্লাস্টারড ইনডেক্স কোয়েরিতে ব্যবহার করা হত তবে পরিসংখ্যানগুলি কী দেখায়?
বব ব্রায়ান

আকর্ষণীয় প্রশ্ন, @ بابাই ব্রায়ান - ক্লাস্টারড ইনডেক্সটি দৃ .়তা অব্যাহত রাখতে সক্ষম করতে প্রয়োজন, যদিও এটির অনন্য সূচি হওয়ার দরকার নেই। আমি TestComputedColumnপরিবর্তে অন্য কিছু কলামে ভিউটির ক্লাস্টার্ড সূচক তৈরি করতে পারতাম । তবে, যেহেতু ক্লাস্টারড ইনডেক্সে সারণী / দর্শনগুলির জন্য সমস্ত ডেটা রয়েছে, তাই আমি সিদ্ধান্ত নিয়েছি যে ক্লাস্টারিং কী হিসাবে মনোোটোনিকভাবে বর্ধমান সংখ্যাটি ব্যবহার করা ভাল। দ্রষ্টব্য, আমি প্রকৃতপক্ষে সেই অনুমানটি পরীক্ষা করিনি, এবং এটি সম্ভবত তিরস্কারের কিছু পরিবর্তনের জন্যও ভুল হতে পারে।
ম্যাক্স ভার্নন

দ্রষ্টব্য, নন-ক্লাস্টারড ইনডেক্স কোনও প্রচ্ছদ সূচক নয়, এবং এমন কোনও ক্যোয়ারী যা ভিউ বা অন্তর্নিহিত টেবিলের যে কোনও একটিতে কলামগুলি ফিল্টার করে, যোগদান করে, বা বেস টেবিলের বিপরীতে একটি কী-লুকিং অপারেশন সম্পাদন করতে হবে বা দৃশ্য. সম্ভবত এটি সম্ভব যে বাস্তব-জগতের দৃশ্যের জন্য, আমার উত্তরের সীমিত সুযোগটি আরও ভাল পারফরম্যান্সকে সামনে রেখে ব্যাখ্যা করা যেতে পারে।
ম্যাক্স ভার্নন

4

থেকে Create Indexএবং তার whereদফা, এই সম্ভব নয়:

কোথায়

সূচকগুলিতে কোন সারিগুলি অন্তর্ভুক্ত করবেন তা নির্দিষ্ট করে একটি ফিল্টারড সূচক তৈরি করে। ফিল্টারড সূচকটি অবশ্যই কোনও টেবিলে একটি অবিচ্ছিন্ন সূচক হতে হবে। ফিল্টার সূচকগুলিতে ডেটা সারিগুলির জন্য ফিল্টার করা পরিসংখ্যান তৈরি করে।

ফিল্টার প্রিকেটটি সাধারণ তুলনা যুক্তি ব্যবহার করে এবং একটি গণিত কলাম, একটি ইউডিটি কলাম, একটি স্থানিক ডেটা টাইপ কলাম, বা একটি শ্রেণিবদ্ধ ডেটা টাইপ কলামের উল্লেখ করতে পারে না। তুলনা অপারেটরগুলির সাথে NULL আক্ষরিক ব্যবহারের তুলনা অনুমোদিত নয়। পরিবর্তে IS নাল এবং নাল অপারেটরগুলি ব্যবহার করুন।

সূত্র: এমএসডিএন


3
  • আপনার একটি কলাম দরকার যা ফিল্টারড সূচকটি চালু করার জন্য গণনা করা হয় না।
  • সেই কলামে যাওয়ার জন্য আপনাকে মানটি গুনতে হবে।

আমাদের গনিত কলামগুলির আগে আমরা ট্রিগারগুলি ব্যবহার করি গণনার যখনই সারি পরিবর্তন বা সন্নিবেশ করা হত তখন কলামগুলির মান গণনা করতে ।

(ত্রিগুজের সাহায্যে তৃতীয় টেবিল থেকে আইটেমের পিকে সন্নিবেশ / সরাতে ব্যবহার করা যেতে পারে যা ততক্ষণে প্রশ্নের মধ্যে ব্যবহৃত হত))


3

এটি ম্যাক্স ভার্ননের চারপাশের কাজের উন্নতির চেষ্টা at । তার সমাধানে তিনি ভিউতে 2 টি সূচক এবং কোনও পরিসংখ্যান অবজেক্ট ব্যবহার করার পরামর্শ দেন।

1 ম সূচকটি ক্লাস্টার করা হয়, যা আসলে কোনও টেবিলের অবিচ্ছিন্ন সূচকের বিপরীতে প্রয়োজনীয় কারণ, ভিউতে একটি অবিবাহিত সূচক তৈরির চেষ্টা করা থাকলে প্রথমে একটি ক্লাস্টারযুক্ত সূচক না থাকলে ত্রুটি তৈরি করা হবে।

২ য় সূচকটি একটি অনিবন্ধিত সূচক, যা ক্যোয়ারির পিছনে সূচক হিসাবে ব্যবহৃত হয়। তার উত্তরের মন্তব্য বিভাগে, আমি জিজ্ঞাসা করেছি যে যদি ক্লাস্টারড সূচকটি একটি নন-ক্ল্লাস্টার্ড সূচক পরিবর্তে ব্যবহার করা হয় তবে কী হবে।

নিম্নলিখিত বিশ্লেষণ এই প্রশ্নের উত্তর দেওয়ার চেষ্টা করে।

আমি তার সঠিক একই কোডটি ব্যবহার করছি, যদি না আমি ভিউতে একটি অবিবাহিত সূচক তৈরি না করি।

আমি একটি পরিসংখ্যান অবজেক্টও তৈরি করছি না। যদি আপনি নীচের কোডটি প্রবেশের জন্য এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও (এসএসএমএস) অনুসরণ করে এবং ব্যবহার করে থাকেন তবে আপনাকে সচেতন হওয়া উচিত যে আপনি কয়েকটি লাল স্কুইগ্লি লাইন দেখতে পাচ্ছেন - যা ত্রুটির মতো দেখায়। এগুলি (সম্ভবত) ত্রুটি নয়, তবে ইন্টেলিজেন্স সহ কোনও সমস্যা জড়িত।

আপনি হয় ইন্টেলিজেন্স অক্ষম করতে পারেন বা কেবল ত্রুটি উপেক্ষা করে কমান্ডগুলি চালাতে পারেন। তাদের ত্রুটি ছাড়াই সম্পূর্ণ করা উচিত।

-- Create the test table that uses a computed column.
USE tempdb;
CREATE TABLE dbo.PersistedViewTest
(
    PersistedViewTest_ID INT NOT NULL
    CONSTRAINT PK_PersistedViewTest
    PRIMARY KEY CLUSTERED
    IDENTITY(1,1)
    , SomeData VARCHAR(2000) NOT NULL
    , TestComputedColumn AS (PersistedViewTest_ID - 1) PERSISTED
);
GO

-- Insert some test data into the table.
INSERT INTO dbo.PersistedViewTest (SomeData)
SELECT o.name + o1.name + o2.name
FROM sys.objects o
    CROSS JOIN sys.objects o1
    CROSS JOIN sys.objects o2;
GO

নিম্নলিখিত ক্রিয়াকলাপটি ছকটির বিপরীতে চালানোর পরে নিম্নলিখিত কার্যনির্বাহী পরিকল্পনা (কোনও দর্শন / সূচি দেখুন না) তৈরি করা হয়েছে:

SELECT pv.PersistedViewTest_ID, pv.TestComputedColumn
FROM dbo.PersistedViewTest pv
WHERE pv.TestComputedColumn = CONVERT(INT, 26)
GO

এখানে চিত্র বর্ণনা লিখুন

এটি তুলনা করার জন্য একটি বেসলাইন দেয়। লক্ষ্য করুন যে ক্যোয়ারী শেষ হওয়ার পরে, একটি পরিসংখ্যান অবজেক্ট তৈরি করা হয়েছে (_WA_Sys_00000003_1FCDBCEB)। ক্লাস্টারড টেবিল সূচক তৈরি হওয়ার সময় PK_PersistedViewTest পরিসংখ্যান অবজেক্ট তৈরি করা হয়েছিল।

এরপরে, এই দৃশ্যে ফিল্টার করা ভিউ এবং ক্লাস্টার্ড সূচক তৈরি করা হয়:

-- Create filtered view on the computed column.
CREATE VIEW dbo.PersistedViewTest_View
WITH SCHEMABINDING
AS
SELECT PersistedViewTest_ID, SomeData, TestComputedColumn
FROM dbo.PersistedViewTest
WHERE TestComputedColumn < CONVERT(INT, 27);
GO

-- Create unique clustered index to persist the values, including the computed column.
CREATE UNIQUE CLUSTERED INDEX IX_PersistedViewTest
ON dbo.PersistedViewTest_View(PersistedViewTest_ID);
GO

এখন, আবার ক্যোয়ারী চালানোর চেষ্টা করা যাক, তবে এবার এই দৃষ্টির বিপরীতে:

SELECT pv.PersistedViewTest_ID, pv.TestComputedColumn
FROM dbo.PersistedViewTest_View pv
WHERE pv.TestComputedColumn = CONVERT(INT, 26)
GO

নতুন এক্সিকিউশন প্ল্যান এখন:

এখানে চিত্র বর্ণনা লিখুন

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

ক্যোয়ারী প্ল্যানটি এখনও পরামর্শ দেয় যে একটি অবিবাহিত সূচক তৈরি করা ক্যোয়ারীর কার্যকারিতা উন্নত করতে বেশ সহায়ক হবে। সুতরাং, এর অর্থ কি এই যে একটি কাঙ্ক্ষিত সূচকটি পছন্দসই পারফরম্যান্সের উন্নতি অর্জনের আগে ভিউতে যুক্ত করতে হবে? চেষ্টা করার জন্য একটি শেষ জিনিস আছে। "উইথ ননপ্যাণ্ড" বিকল্পটি ব্যবহার করতে ক্যোয়ারীটি পরিবর্তন করুন:

SELECT pv.PersistedViewTest_ID, pv.TestComputedColumn
FROM dbo.PersistedViewTest_View pv WITH (NOEXPAND)
WHERE pv.TestComputedColumn = CONVERT(INT, 26)
GO

নিম্নলিখিত কোয়েরি পরিকল্পনার ফলাফল:

এখানে চিত্র বর্ণনা লিখুন

এই এক্সিকিউশন প্ল্যানটি ম্যাক্স ভার্ননের উত্তরে প্রদত্ত নন ক্ল্লাস্টারড ইনডেক্সের সাথে উত্থাপিত পরিকল্পনার সাথে বেশ মিল রয়েছে। তবে, এটি একটি কম (ননক্র্লাস্টারড) সূচক এবং আরও একটি কম পরিসংখ্যান অবজেক্টের সাথে সম্পন্ন হয়।

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

উপরের বিশ্লেষণটি এসকিউএল সেভার ২০১৪ এর এক্সপ্রেস সংস্করণ দিয়ে করা হয়েছিল। আমি এসকিউএল সার্ভার ২০১ 2016 এর বিকাশকারী সংস্করণ দিয়েও এটি চেষ্টা করেছিলাম। পারফরম্যান্স লাভ অর্জনের জন্য নোক্সপ্যান্ড বিকল্পটি বিকাশ সংস্করণের সাথে প্রয়োজনীয় বলে মনে হচ্ছে না, তবে এখনও প্রস্তাবিত ।

5 মাসেরও কম আগে মাইক্রোসফ্ট বিকাশকারী সংস্করণগুলি বিনামূল্যে তৈরি করে । লাইসেন্সটি কেবলমাত্র উন্নয়নের ক্ষেত্রে ব্যবহারকে সীমাবদ্ধ করে, যার অর্থ ডেটাবেস উত্পাদন পরিবেশে ব্যবহার করা যায় না। সুতরাং, আপনি যদি মেমরির অপ্টিমাইজড টেবিলগুলি, এনক্রিপশন, আর ইত্যাদি পরীক্ষা করার চেষ্টা করছেন তবে আপনার আর লাইসেন্স-অজুহাত নেই। কোনও সমস্যা ছাড়াই আমি কয়েক দিন আগে এসকিউএল সার্ভার ২০১৪ এক্সপ্রেস পাশাপাশি আমার কম্পিউটারে এটি সফলভাবে ইনস্টল করেছি।

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