MS-SQL Group By 대표값 ,뷰 갱신 시점,인덱스 자동으로 설정 방법 0 3 1,007

by 너부리주름살 [SQL Query] mssql.view [2020.02.28 13:19:07]


안녕하세요.

몇가지 질문 드리겠습니다.

답변에 미리 감사드립니다.

 

Q1. Group By 한 컬럼말고 같은값인 다른 컬럼 값 출력

Group By 한 컬럼말고 다른 컬럼은 같은 값입니다. 그런데 출력은 하고 싶습니다. 집계함수 max나 min 등을 걸어서 해도 되지만 데이터가 늘어나면서 느려져서요.. 

 

Q2. 뷰를 한번 만들어놓고 연관된 테이블이 변경되는 거에 따라 데이터 추가가 가능한가요?

CREATE VIEW [dbo].[V_GOODS]
AS
SELECT     G.No, G.SiteID, G.DealerNo, G.GoodsKind, G.GoodsCode, G.GoodsName, G.Summary, G.ImgB, G.ImgM, G.ImgS, G.Attach, G.IsDelAttach, G.Keyword, G.MarketPrice, 
                      G.Price, G.OriginalPrice, G.PriceSplit, G.CmsType, G.Margin, G.IsTaxFree, G.Stock, G.CmoneyPolicy, G.CmoneyValue, G.OptionKind, G.BrandIdx, G.Product, G.Origin, 
                      G.DeliveryPolicy, G.DeliveryMethod, G.DeliveryFee, G.DeliveryLimit, G.Icons, G.IsDisplay, G.State, G.IsReturn, G.Sort, G.OrgNo, G.ModDate, G.TrashDate, G.RegDate, 
                      GT.GoodsNo, GT.Quantity, GT.Hits, GT.Sales, GT.ReviewRate, G.Sdate, G.Edate
FROM         dbo.T_GOODS AS G INNER JOIN
                      dbo.T_GOODS_TOTAL AS GT ON G.No = GT.GoodsNo

 

DBtool에서 보니 이런 뷰가 생성 돼어있는데 

소스 단에서는 create view 부분가 없어서요.

한번 생성해 놓고 해당 테이블이 변경되면 뷰가 갱신되게 할수도 있나해서요

 

Q3.인덱스를 자동으로 고는 방법이있나요?

 

CREATE TABLE dbo.T_EVENT (
	Idx int IDENTITY(1,1) NOT NULL,
	SiteID nvarchar(20) COLLATE Korean_Wansung_CI_AS NOT NULL,
	DealerNo int NOT NULL,
	[Method] nvarchar(20) COLLATE Korean_Wansung_CI_AS NOT NULL,
	Subject nvarchar(200) COLLATE Korean_Wansung_CI_AS NULL,
	ImgEvent nvarchar(300) COLLATE Korean_Wansung_CI_AS NULL,
	ImgEventMobile nvarchar(300) COLLATE Korean_Wansung_CI_AS NULL,
	Content ntext COLLATE Korean_Wansung_CI_AS NULL,
	ContentMobile ntext COLLATE Korean_Wansung_CI_AS NULL,
	LeftmenuIdx int NOT NULL,
	ImgWidth int NOT NULL,
	ImgHeight int NOT NULL,
	DisplayCols int NOT NULL,
	StartDate datetime NULL,
	EndDate datetime NULL,
	IsRun nvarchar(20) COLLATE Korean_Wansung_CI_AS NOT NULL,
	State nvarchar(20) COLLATE Korean_Wansung_CI_AS NOT NULL,
	OrgIdx int NOT NULL,
	IsDel nchar(1) COLLATE Korean_Wansung_CI_AS NOT NULL,
	DelDate datetime NULL,
	Sort int NOT NULL,
	RegDate datetime NOT NULL,
	CONSTRAINT PK__T_EVENT__C496003E725BF7F6 PRIMARY KEY (Idx)
) GO
 CREATE NONCLUSTERED INDEX IE_EVENT_01 ON dbo.T_EVENT (  DealerNo ASC  )  
	 WITH (  PAD_INDEX = OFF ,FILLFACTOR = 100  ,SORT_IN_TEMPDB = OFF , IGNORE_DUP_KEY = OFF , STATISTICS_NORECOMPUTE = OFF , ONLINE = OFF , ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON  )
	 ON [PRIMARY ]  GO
 CREATE NONCLUSTERED INDEX IE_EVENT_02 ON dbo.T_EVENT (  Method ASC  )  
	 WITH (  PAD_INDEX = OFF ,FILLFACTOR = 100  ,SORT_IN_TEMPDB = OFF , IGNORE_DUP_KEY = OFF , STATISTICS_NORECOMPUTE = OFF , ONLINE = OFF , ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON  )
	 ON [PRIMARY ]  GO

 

인덱스가 "CONSTRAINT PK__T_EVENT__C496003E725BF7F6 PRIMARY KEY (Idx)" 이런식으로 걸려있는데 C496003E725BF7F6이런 숫자가 자동으로 걸어서 생긴거 같아보여서 질문드립니다.

by 마농 [2020.02.28 14:01:56]

A1 -> Group By 절에 추가하면 됩니다.
A2 -> 뷰는 데이터를 가지고 있지 않고 그냥 원본을 바라봅니다. 원본 자료가 변하면 뷰도 변하죠.
A3 -> 제약조건 만들 때 이름을 지정하면 되는데, 이름 지정 안해서 자동 작명한 것이 아닐까? 생각됩니다.


by 너부리주름살 [2020.02.28 15:25:27]

짧고 완벽한 답변 감사드립니다.

뷰가 좋은기능이네요. 

create 뷰이름 하고 

나중에 select 뷰이름 할때 뷰 ddl안의 select문으로 테이블 내용을 가져오는건가요?

 

 

 


by 마농 [2020.02.28 15:41:26]

네. 뷰에 정의된 쿼리가 그대로 인라인뷰 형태로 수행됩니다.
 - 명령쿼리 : SELECT * FROM 뷰;
 - 수행쿼리 : SELECT * FROM (SELECT ... );

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입