এসকিউএল সার্ভারের সাহায্যে টেবিল তৈরি করুন within


95

কোনও এসকিউএল সার্ভার তৈরি করুন টেবিল স্টেটমেন্টের মধ্যে একটি প্রাথমিক কী বা অনন্য সূচক তৈরি করা সম্ভব। একটি তৈরি টেবিল বিবৃতি মধ্যে একটি অ-অনন্য সূচক তৈরি করা সম্ভব ?

CREATE TABLE MyTable(
    a int NOT NULL
    ,b smallint NOT NULL
    ,c smallint NOT NULL
    ,d smallint NOT NULL
    ,e smallint NOT NULL

    -- This creates a primary key
    ,CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (a)

    -- This creates a unique nonclustered index on columns b and c
    ,CONSTRAINT IX_MyTable1 UNIQUE (b, c)

    -- Is it possible to create a non-unique index on columns d and e here?
    -- Note: these variations would not work if attempted:
    -- ,CONSTRAINT IX_MyTable2 INDEX (d, e)
    -- ,CONSTRAINT IX_MyTable3 NONCLUSTERED INDEX (d, e)
);
GO

-- The proposed non-unique index should behave identically to
-- an index created after the CREATE TABLE statement. Example:
CREATE NONCLUSTERED INDEX IX_MyTable4 ON MY_TABLE (d, e);
GO

আবার, লক্ষ্যটি হ'ল তৈরি টেবিল বিবৃতিতে অনন্য-অনন্য সূচক তৈরি করা, তার পরে নয়।

এটির মূল্যের জন্য, আমি [সারণী সারণীর জন্য এসকিউএল সার্ভার বই অনলাইন এন্ট্রি] সহায়ক হতে পারি নি।

এছাড়াও, [এই প্রশ্ন] প্রায় অভিন্ন, তবে গৃহীত উত্তর প্রযোজ্য নয়।

উত্তর:


126

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

ক্রিয়েট টেবিল বিবৃতিতে অ-স্বতন্ত্র-নন-ক্লাস্টারযুক্ত সূচকগুলি যুক্ত করার মতো আপনার প্রয়োজন কেন?

নোট করুন যে এসকিউএল সার্ভার 2014 ইনলাইন সূচক তৈরি বিকল্পটি চালু করেছে :

CREATE TABLE MyTable(
    a int NOT NULL
    ,b smallint NOT NULL
    ,c smallint NOT NULL
    ,d smallint NOT NULL
    ,e smallint NOT NULL

    -- This creates a primary key
    ,CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (a)

    -- This creates a unique nonclustered index on columns b and c
    ,CONSTRAINT IX_MyTable1 UNIQUE (b, c)

    -- This creates a non-clustered index on (d, e)
    ,INDEX IX_MyTable4 NONCLUSTERED (d, e)
);
GO

17
মহান ব্যাখ্যা জন্য ধন্যবাদ! কেন? খাঁটি কারণে নান্দনিক কারণে। আমি ভেবেছিলাম স্ক্রিপ্টটি পড়ার পক্ষে কারও পক্ষে সুবিধাজনক হতে পারে যদি সমস্ত বিবৃতি বা সূচকগুলি একই বিবৃতিতে অন্তর্ভুক্ত থাকে। ব্যক্তিগতভাবে, আমি জানতে চাই যে কোনও বিদেশী কী সম্পর্কিত কলামগুলিতেও একটি সূচক রয়েছে কিনা এবং একই বিবৃতিতে যৌক্তিকভাবে এই তথ্যকে গোষ্ঠীভুক্ত করার জন্য এটি একটি দুর্দান্ত পদ্ধতি হতে পারে।
মাইক 21

আমি পেয়েছি Error: (1146) Table 'tablename' doesn't exist, হাহাহাহা,
বিড়ম্বনা

13

হিসাবে প্রতি টি-এসকিউএল সারণি তৈরি ডকুমেন্টেশন, 2014 সালে কলাম সংজ্ঞা একটি সূচক সংজ্ঞা সমর্থন করে:

<column_definition> ::=  
column_name <data_type>  
    ...
    [ <column_index> ]  

এবং ব্যাকরণ হিসাবে সংজ্ঞায়িত করা হয়:

<column_index> ::=   
 INDEX index_name [ CLUSTERED | NONCLUSTERED ]  
    [ WITH ( <index_option> [ ,... n ] ) ]  
    [ ON { partition_scheme_name (column_name )   
         | filegroup_name  
         | default   
         }  
    ]   
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]  

সুতরাং একটি পৃথক বিবৃতি হিসাবে আপনি যা করতে পারেন তা অনেকগুলি ইনলাইনে করা যায়। আমি লক্ষ্য করেছিinclude যে এই ব্যাকরণে কোনও বিকল্প নয় তাই কিছু জিনিস সম্ভব হয় না।

CREATE TABLE MyTable(
    a int NOT NULL
    ,b smallint NOT NULL index IX_MyTable_b nonclustered
    ,c smallint NOT NULL
    ,d smallint NOT NULL
    ,e smallint NOT NULL
)

আপনার কলামগুলির পরে অন্য লাইন হিসাবে ইনলাইন সূচকগুলি সংজ্ঞায়িত করা যেতে পারে তবে তৈরি টেবিলের বিবৃতিতে এবং এটি সূচীতে একাধিক কলামগুলিকে মঞ্জুরি দেয় তবে এখনও কোনও includeধারা নেই:

< table_index > ::=   
{  
    {  
      INDEX index_name [ CLUSTERED | NONCLUSTERED ]   
         (column_name [ ASC | DESC ] [ ,... n ] )   
    | INDEX index_name CLUSTERED COLUMNSTORE  
    | INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )  
    }  
    [ WITH ( <index_option> [ ,... n ] ) ]   
    [ ON { partition_scheme_name (column_name )   
         | filegroup_name  
         | default   
         }  
    ]   
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]  

}   

উদাহরণস্বরূপ এখানে আমরা উভয় স্তম্ভ সি এবং ডিতে একটি সূচক যুক্ত করব:

CREATE TABLE MyTable(
    a int NOT NULL
    ,b smallint NOT NULL index IX_MyTable_b nonclustered
    ,c smallint NOT NULL
    ,d smallint NOT NULL
    ,e smallint NOT NULL

    ,index IX_MyTable_c_d nonclustered (c,d)
)

4
এটি দুর্দান্ত কাজ করে এবং বিওএল অনুসারে এটি কমপক্ষে ২০০৮ এ ফিরে আসে। ও.পি.-এর মতো আমিও বেশিরভাগ দেখতে পেলাম কোডটি খুঁজে পাই (সাধারণত এসএসএমএস দ্বারা উত্পন্ন) আমার চোখের ছোঁয়াগুলিকে আঘাত করে এবং আমি কেবল আমার টেবিলের সংজ্ঞাটি যুক্তিবাদী মানুষের পক্ষে উপলব্ধি করতে পছন্দ করি। ধন্যবাদ
ওয়েড হ্যাটলার

8

এটি একটি পৃথক বিবৃতি।

কোনও টেবিলের মধ্যে সন্নিবেশ করা এবং এটি থেকে নির্বাচন করা এবং একই বিবৃতিতে একটি সূচক তৈরি করাও সম্ভব নয়।

বিএল এন্ট্রিতে আপনার প্রয়োজনীয় তথ্য রয়েছে:

ক্লাস্টার্ড | অবিচ্ছিন্ন
ইঙ্গিত করুন যে একটি ক্লাস্টারযুক্ত বা একটি অনিবন্ধিত সূচক প্রাইমারি কী বা অনন্য সীমাবদ্ধতার জন্য তৈরি করা হয়েছে। প্রাথমিক কী মূলত ডিফল্টটিকে ক্লাস্টার্ডে সীমাবদ্ধ করে, এবং ইউনিক্য ডিফল্টটিকে অবিচ্ছিন্নভাবে সীমাবদ্ধ করে।

একটি সারণী বিবৃতি বিবৃতিতে, ক্লাস্টারড কেবল একটি প্রতিবন্ধকতার জন্য নির্দিষ্ট করা যেতে পারে। যদি ক্লাস্টারড একটি অনন্য বাধার জন্য নির্দিষ্ট করা হয় এবং প্রাথমিক মূল সীমাবদ্ধতাও নির্দিষ্ট করা থাকে তবে প্রাথমিক কী অকেজো হয়ে থাকে।

আপনি কোনও পিকে ক্ষেত্রে একটি সূচক তৈরি করতে পারেন তবে নন-পিকে নন-অনন্য-সীমাবদ্ধ ক্ষেত্রে কোনও ক্লাস্টারযুক্ত সূচক নয়।

একটি এনসিএল সূচক টেবিলের কাঠামোর সাথে প্রাসঙ্গিক নয় এবং এটি টেবিলের অভ্যন্তরের ডেটাতে কোনও বাধা নয়। এটি একটি পৃথক সত্তা যা টেবিলকে সমর্থন করে তবে এটি কার্যকারিতা বা ডিজাইনের সাথে অবিচ্ছেদ্য নয়।

এ কারণেই এটি পৃথক বিবৃতি এনসিএল সূচকটি ডিজাইনের দৃষ্টিকোণ থেকে টেবিলের সাথে অপ্রাসঙ্গিক (


7

সারণী তৈরির স্ক্রিপ্ট ইনলাইন কীভাবে ইনডেক্স তৈরি করবেন তার গ্রহণযোগ্য উত্তর আমার পক্ষে কার্যকর হয়নি। এটি করেছে:

CREATE TABLE [dbo].[TableToBeCreated]
(
    [Id] BIGINT IDENTITY(1, 1) NOT NULL PRIMARY KEY
    ,[ForeignKeyId] BIGINT NOT NULL
    ,CONSTRAINT [FK_TableToBeCreated_ForeignKeyId_OtherTable_Id] FOREIGN KEY ([ForeignKeyId]) REFERENCES [dbo].[OtherTable]([Id])
    ,INDEX [IX_TableToBeCreated_ForeignKeyId] NONCLUSTERED ([ForeignKeyId])
)

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


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

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