天天看點

SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

sqlserver2014資料庫應用技術

《清華大學出版社》 

索引

這是一個很重要的概念,我們知道資料在計算機中其實是分頁存儲的,就像是單詞存在字典中一樣

資料庫索引可以幫助我們快速定位資料在哪個存儲頁區,而不用掃描整個資料庫

索引一旦被建立就會資料庫自動管理和維護,增删改插座資料庫都會對索引做修改

索引分類:

  • 聚集索引
  • 非聚集索引
  • 包含性列索引
  • 索引視圖
  • 全文索引
  • xml索引

聚集索引,就是相當于排序的字典(将表中的資料完全重新排序),一個表隻有一個,所占空間相當于表中資料的120%,資料建立聚集索引,會改變資料行的存儲實體結構

非聚集索引,不改變資料行的實體存儲結構,CREATE INDEX預設建立非聚集索引,理論一個表可以有249個非聚集索引

索引和限制

設定主鍵,會自動建立PRIMARY KEY 和建立一個聚集索引

建立UNIQUE 限制會自動建立一個唯一非聚集索引

建立表的索引

SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

使用SQL語句

CREATE INDEX IX_name_mj
ON 買家表(買家名稱)
GO
      
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

 檢視索引

EXEC sp_helpindex 買家表
      
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

分析索引

檢視查詢計劃,使用的索引(優先使用聚集索引)

SET SHOWPLAN_ALL ON
GO
SELECT * FROM 買家表
GO

SET SHOWPLAN_ALL OFF
GO
      
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

顯示統計資訊,檢視所花費的磁盤io活動量

SET STATISTICS IO ON
GO
SELECT * FROM 買家表
GO

SET STATISTICS IO OFF
GO
      
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

 維護索引

資料表的增删改操作會産生大量索引碎片,索引表不連續,降低索引性能,需要整理索引

檢視索引碎片SQL

DBCC SHOWCONTIG(買家表,PK_買家表)
GO
      
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

 ssms檢視索引

SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

索引碎片整理

DBCC INDEXDEFRAG(銷售管理,買家表,PK_買家表)
      
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

 觸發器

觸發器是一個進階的資料限制,他是特殊的存儲過程,不能通過執行sql觸發,由增删改等事件自動觸發

sqlserver2014提供3種觸發器:

  • DML觸發器,包括事後觸發器,替代觸發器,CLR運作時觸發器
  • DDL觸發器,修改表結構觸發
  • LOGIN觸發器,登入的時候觸發

DML觸發器

INSERT觸發器

如果員工年齡不到18歲不執行插入操作

CREATE TRIGGER Employee_Insert
	ON Employee
	AFTER INSERT
AS
BEGIN
	--從INSERTED表擷取新插入員工的出生年月
	DECLARE @birthday date
	SELECT @birthday=birthday FROM inserted
	--判斷新員工年齡
	IF(YEAR(GETDATE())-YEAR(@birthday)<18)
	BEGIN
		PRINT '該員工年齡不到18歲,不能入職!'
		ROLLBACK TRANSACTION  --復原這個節點之前的所有操作,然後繼續執行後面的語句
	END
END
      

驗證

INSERT Employee VALUES('小明','2012-10-10')
      
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

再驗證

INSERT Employee VALUES('小明','1912-10-10')
      
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

注意主鍵id仍然會增長,即使剛剛的操作復原了,id還是增加了1

 UPDATE觸發器

防止使用者修改員工姓名name字段

CREATE TRIGGER Employee_Update
	ON Employee
	AFTER UPDATE
AS
BEGIN
	IF(UPDATE(NAME))
	BEGIN
		PRINT '禁止修改員工姓名!'
		ROLLBACK TRANSACTION  --復原這個節點之前的所有操作,然後繼續執行後面的語句
	END
END
      
UPDATE Employee SET NAME='XX'
      
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

資料庫的維護

備份

使用存儲過程建立備份裝置

EXEC sp_addumpdevice 'DISK','COMB','E"\DATA\COMB.BAK'
      
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

删除備份裝置

EXEC sp_dropdevice 'COMB'
      
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

使用SQL建立資料庫備份

BACKUP DATABASE 銷售管理
TO COMB
      
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護

使用SQL還原資料庫

RESTORE DATABASE COMB
FROM DISK='E:/DATA/COMB.BAK'
      
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護
SQL Serever學習16——索引,觸發器,資料庫維護 sqlserver2014資料庫應用技術《清華大學出版社》 索引 觸發器資料庫的維護