/****************************************************************** ¢Ã Index *******************************************************************/ --------------------------------------------------------------------------------- -- ¢º À妽º °ü·Ã Dynamic Management Objects (6ÆäÀÌÁö) --------------------------------------------------------------------------------- -- »ç¿ëµÈ À妽º¿Í À妽º »ç¿ë ºóµµ È®ÀÎ select * from sys.dm_db_index_usage_stats; go -- À妽ºÀÇ i/o ¹× Àá±Ý Á¤º¸ select * from sys.dm_db_index_operational_stats (db_id('adventureworks') ,object_id('adventureworks.person.address') , null , null); go -- À妽ºÀÇ Á¶°¢È­ Á¤º¸ select * from sys.dm_db_index_physical_stats (db_id('adventureworks') , object_id('adventureworks.person.address') , null , null , default) go --------------------------------------------------------------------------------- -- ¢º À妽º Á¤º¸ È®ÀÎ (7~10,15~19 ÆäÀÌÁö) --------------------------------------------------------------------------------- use adventureworks; go -- 1. Å×ÀÌºí »ý¼º if objectproperty(object_id('salesorderdetail_test'), 'isusertable') = 1 drop table salesorderdetail_test; go select * into salesorderdetail_test from sales.salesorderdetail; go -- 2. À妽º »ý¼º alter table dbo.salesorderdetail_test add constraint pk_salesorderdetail_test primary key clustered (salesorderid,salesorderdetailid); go -- 3. À妽º ¹× Åë°è Á¤º¸ È®ÀÎ exec sp_helpindex 'dbo.salesorderdetail_test'; go select * from sys.indexes where object_id = object_id('salesorderdetail_test'); -- catalog views go select * from sys.stats where object_id = object_id('salesorderdetail_test'); -- catalog views go -- 4. À妽º Á¶°¢È­ Á¤º¸ dbcc showcontig('salesorderdetail_test') with tableresults; -- with fast, limited scan go --ÀÔ·Â °¡´ÉÇÑ ¸ðµå : default, null, limited, sampled, detailed -- default = null = limited --ÀÔ·Â °¡´ÉÇÑ À妽ºid : null, 0, 1, 2-250 -- null = all index, 0 = heap, 1 = clustered, 2-250 = non-clustered select * from sys.dm_db_index_physical_stats (db_id(), object_id('adventureworks.dbo.salesorderdetail_test') , 1, null, 'sampled'); go select * from sys.dm_db_index_physical_stats (db_id(), object_id('adventureworks.dbo.salesorderdetail_test') , 1, null, null); -- 'limited'; go select * from sys.dm_db_index_physical_stats (db_id(), object_id('adventureworks.dbo.salesorderdetail_test') , 1, null, 'detailed'); go --------------------------------------------------------------------------------- -- ¢º À妽º À籸¼º (12~14 ÆäÀÌÁö) --------------------------------------------------------------------------------- use adventureworks; go -- 1. Å×ÀÌºí »ý¼º if objectproperty(object_id('salesorderdetail_test'), 'isusertable') = 1 drop table salesorderdetail_test; go select * into salesorderdetail_test from sales.salesorderdetail; go -- 2. À妽º »ý¼º alter table dbo.salesorderdetail_test add constraint pk_salesorderdetail_test primary key clustered (salesorderid,salesorderdetailid); go -- dbcc indexdefrag(³»ºÎ Àá±Ý ¹ß»ý, ³í¸®Àû À籸¼º) dbcc indexdefrag (adventureworks, 'dbo.salesorderdetail_test', pk_salesorderdetail_test) go -- alter index ~ reorganize(³»ºÎ Àá±Ý ¾øÀ½, ³í¸®Àû À籸¼º) alter index pk_salesorderdetail_test on dbo.salesorderdetail_test reorganize; go --------------------------------------------------------------------------------- -- ¢º À妽º ºñÈ°¼ºÈ­ ¹× À籸¼º (20~27 ÆäÀÌÁö) --------------------------------------------------------------------------------- -- Ŭ·¯½ºÅ͵å À妽º ºñÈ°¼ºÈ­ÇÑ ÈÄ, ÀçÀÛ¼º use adventureworks; go select * from dbo.salesorderdetail_test; go exec sp_helpindex 'dbo.salesorderdetail_test'; go alter index pk_salesorderdetail_test on dbo.salesorderdetail_test disable ; go select * from dbo.salesorderdetail_test; go /* ¸Þ½ÃÁö 8655, ¼öÁØ 16, »óÅ 1, ÁÙ 1 Å×ÀÌºí ¶Ç´Â ºä 'salesorderdetail_test'ÀÇ À妽º 'pk_salesorderdetail_test'ÀÌ(°¡) ºñÈ°¼ºÈ­µÇ¾úÀ¸¹Ç·Î Äõ¸® ÇÁ·Î¼¼¼­¿¡¼­ °èȹÀ» »ý¼ºÇÒ ¼ö ¾ø½À´Ï´Ù. */ select is_disabled from sys.indexes where object_id = object_id('salesorderdetail_test'); go alter index pk_salesorderdetail_test on dbo.salesorderdetail_test rebuild with (online=on, fillfactor = 90); go /* ¸Þ½ÃÁö 1988, ¼öÁØ 16, »óÅ 1, ÁÙ 1 Ŭ·¯½ºÅÍÇü À妽º 'pk_salesorderdetail_test'Àº(´Â) ºñÈ°¼ºÈ­µÇ¾î ÀÖÀ¸¹Ç·Î ¿Â¶óÀÎ »óÅ¿¡¼­ ´Ù½Ã ÀÛ¼ºÇÒ ¼ö ¾ø½À´Ï´Ù. */ alter index all on dbo.salesorderdetail_test rebuild; go select * from dbo.salesorderdetail_test; go select is_disabled from sys.indexes where object_id = object_id('salesorderdetail_test'); -- Ŭ·¯½ºÅ͵å À妽º¸¦ ¿Â¶óÀλ󿡼­ ÀçÀÛ¼ºÇϱâ -- ¿Â¶óÀÎ À妽º ÀÛ¾÷Àº enterprise edition¿¡¼­¸¸ °¡´É alter index pk_salesorderdetail_test on dbo.salesorderdetail_test rebuild with (online=on, fillfactor = 90); go -- ³ÍŬ·¯½ºÅ͵å À妽º¸¦ ¿Â¶óÀλ󿡼­ À籸¼ºÇϱâ create index ix_productid on dbo.salesorderdetail_test (productid); go alter index ix_productid on dbo.salesorderdetail_test rebuild with (online=on, fillfactor = 90); go -- alter indexÀÇ ¿É¼Ç ¼³Á¤Çϱâ if objectproperty(object_id('optiontestignoredupkey'), 'isusertable') = 1 drop table optiontestignoredupkey; go create table optiontestignoredupkey (col1 int not null, col2 varchar(10)); go create unique clustered index idx_col1 on optiontestignoredupkey (col1); go alter index idx_col1 on optiontestignoredupkey set (ignore_dup_key = on); go select name, ignore_dup_key, allow_page_locks from sys.indexes where object_id=object_id('optiontestignoredupkey'); go --------------------------------------------------------------------------------- -- [Âü°í] FK Á¦¾à Á¶°ÇÀÌ Àִ Ŭ·¯½ºÅ͵å À妽º -- ºñÈ°¼ºÈ­ÇÑ ÈÄ, È°¼ºÈ­Çϱâ --------------------------------------------------------------------------------- use tempdb; go if objectproperty(object_id('cities'), 'isusertable') = 1 drop table cities; go if objectproperty(object_id('states'), 'isusertable') = 1 drop table states; go -- Å×½ºÆ® Å×ÀÌºí »ý¼º create table states (state char(2) not null); go create table cities ( city varchar(30) not null, state char(2) , zip int); go -- pk Á¦¾à Á¶°Ç°ú fk Á¦¾à Á¶°Ç »ý¼º alter table states add constraint pk_states primary key clustered (state); go alter table cities add constraint pk_cities primary key clustered (city); go alter table cities add constraint fk_cities_states_state foreign key (state) references states (state); go -- cities Å×ÀÌºí¿¡ µ¥ÀÌÅÍ insert -- states Å×ÀÌºí¿¡ ¾ø´Â ¡®pr¡¯ °ªÀº cities Å×ÀÌºí¿¡ insert ºÒ°¡´É insert into states select 'ca'; go insert into cities select 'los angles', 'ca',111; go insert into cities select 'san juan', 'pr' ,222; go /* ¸Þ½ÃÁö 547, ¼öÁØ 16, »óÅ 0, ÁÙ 1 insert ¹®ÀÌ foreign key Á¦¾à Á¶°Ç "fk_cities_states_state"°ú(¿Í) Ãæµ¹Çß½À´Ï´Ù. µ¥ÀÌÅͺ£À̽º "tempdb", Å×À̺í "dbo.states", column 'state'¿¡¼­ Ãæµ¹ÀÌ ¹ß»ýÇß½À´Ï´Ù. ¹®ÀÌ Á¾·áµÇ¾ú½À´Ï´Ù. */ -- states Å×À̺íÀÇ Å¬·¯½ºÅ͵å À妽º ºñÈ°¼ºÈ­ -- fk Á¦¾à Á¶°Çµµ µ¿½Ã¿¡ ºñÈ°¼ºÈ­µÈ´Ù alter index pk_states on states disable; go /* °æ°í: À妽º 'pk_states'À»(¸¦) ºñÈ°¼ºÈ­ÇÑ °á°ú Å×À̺í 'states'À»(¸¦) ÂüÁ¶ÇÏ´Â Å×À̺í 'cities'ÀÇ ¿Ü·¡ Å° 'fk_cities_states_state'ÀÌ(°¡) ºñÈ°¼ºÈ­µÇ¾ú½À´Ï´Ù. */ -- cities Å×ÀÌºí¿¡ µ¥ÀÌÅÍ insert -- fk Á¦¾à Á¶°ÇÀÌ ºñÈ°¼ºÈ­µÇ¾úÀ¸¹Ç·Î -- states Å×ÀÌºí¿¡ ¾ø´Â ¡®pr¡¯ °ªÀº cities Å×ÀÌºí¿¡ insert °¡´É insert into cities select 'san juan', 'pr' ,222; go -- states Å×À̺íÀÇ Å¬·¯½ºÅ͵å À妽º À籸¼º alter index pk_states on states rebuild; go -- cities Å×ÀÌºí¿¡ µ¥ÀÌÅÍ insert -- fk Á¦¾à Á¶°ÇÀº ¿©ÀüÈ÷ ºñÈ°¼ºÈ­ »óÅÂÀ̹ǷΠ-- states Å×ÀÌºí¿¡ ¾ø´Â ¡®pr¡¯ °ªÀº cities Å×ÀÌºí¿¡ insert °¡´É insert into cities select 'detroit', 'pr' ,333; go -- fk Á¦¾à Á¶°Ç Àç»ý¼ºÇϱâ alter table cities check constraint fk_cities_states_state; -- cities Å×ÀÌºí¿¡ µ¥ÀÌÅÍ insert -- states Å×ÀÌºí¿¡ ¾ø´Â ¡®pr¡¯ °ªÀº cities Å×ÀÌºí¿¡ insert ºÒ°¡´É insert into cities select 'kenmore', 'pr' ,444; go /* msg 547, level 16, state 0, line 1 the insert statement conflicted with the foreign key constraint "fk_cities_states_state". the conflict occurred in database "adventureworks", table "dbo.states", column 'state'. the statement has been terminated. */ --------------------------------------------------------------------------------- -- ¢º Æ÷°ý ¿­ÀÌ ÀÖ´Â À妽º (32 ÆäÀÌÁö) --------------------------------------------------------------------------------- use adventureworks; go if objectproperty(object_id('address_test'), 'isusertable') = 1 drop table address_test; go select * into address_test from person.address; go alter table address_test add constraint pk_address_test primary key clustered (addressid); go create nonclustered index ix_address_postalcode on dbo.address_test (postalcode) include (addressline1, addressline2, city, stateprovinceid); go select addressline1, addressline2, city, stateprovinceid, postalcode from dbo.address_test where postalcode between n'98000' and n'99999'; go -- included column ¿ëµµ È®ÀÎ create procedure get_index_columns (@object sysname, @index sysname = null) as declare @oid int select @oid = object_id(@object) select c.name as [column], case ic.is_included_column when 0 then 'key' else 'included' end as [column usage] from sys.index_columns ic join sys.columns c on ic.object_id = c.object_id and ic.column_id = c.column_id join sys.indexes i on i.object_id = ic.object_id and i.index_id = ic.index_id where i.object_id = @oid and i.name = @index and i.index_id > 0 go exec dbo.get_index_columns 'dbo.address_test','ix_address_postalcode'; go exec sp_columns address_test; go alter table address_test alter column addressline1 nvarchar(100) not null; go --------------------------------------------------------------------------------- -- ¢º DBCC SHOW_STATISTICS (37 ÆäÀÌÁö) --------------------------------------------------------------------------------- use adventureworks; go dbcc show_statistics ('person.address',ix_address_postalcode); go dbcc show_statistics ('person.address',ix_address_postalcode) with stat_header; --with density_vector; --with histogram; go /********************************* ³¡ ************************************/