Question of the Day: Microsoft | Database, Multiple Questions in One
Question of the Day: Microsoft | Database, Multiple Questions in One
from CareerCup by Jason Yip
HR: SQL What is an index? Explain cluster index. What are the different types of joins. Explain. Explain normalizatiion. What is a foreign key? What is the difference between a primary key and a foreign key? Other basic SQL concepts.
問:Cluster Index和Noncluster Index的區別,主要是使用上的區別
Cluster Index和Noncluster Index的結構都是平衡樹。它們的主要區別是Cluster Index的葉子節點是DATA PAGE而Noncluster Index的葉子節點是數據在DATA PAGE中的指針
Cluster Index使表記錄按物理地址排序,唯一(一般被主鍵占用)
Noncluster Index使表記錄按邏輯地址排序,多個
Cluster Index 在表中只能有一個,而Noncluster Index在表中可以有多個,
通常下面情況可以考慮設置為Cluster Index :
1含數量有限的唯一值的列.
2用下列運算符返回一個范圍值的查詢:BETWEEN、>、>=、< 和 <=。
3回大結果集的查詢。
可考慮將聚集索引用于:
包含大量非重復值的列。
使用下列運算符返回一個范圍值的查詢:BETWEEN、>、>=、< 和 <=。
被連續訪問的列。
返回大型結果集的查詢。
經常被使用聯接或 GROUP BY 子句的查詢訪問的列;一般來說,這些是外鍵列。對 ORDER BY 或 GROUP BY 子句中指定的列進行索引,可以使 SQL Server 不必對數據進行排序,因為這些行已經排序。這樣可以提高查詢性能。
OLTP 類型的應用程序,這些程序要求進行非常快速的單行查找(一般通過主鍵)。應在主鍵上創建聚集索引。
聚集索引不適用于:
頻繁更改的列
這將導致整行移動(因為 SQL Server 必須按物理順序保留行中的數據值)。這一點要特別注意,因為在大數據量事務處理系統中數據是易失的。
寬鍵
來自聚集索引的鍵值由所有非聚集索引作為查找鍵使用,因此存儲在每個非聚集索引的葉條目內。
每個表中只能創建一個聚集索引,每個表可以創建的非聚集索引最多為 249 個
索引是在數據庫表或者視圖上創建的對象,目的是為了加快對表或視圖的查詢的速度
按照存儲方式分為:聚集與非聚集索引
按照維護與管理索引角度分為:唯一索引、復合索引和系統自動創建的索引
索引的結構是由:根節點--->非葉節點--->非葉節點--->葉節點
1、聚集索引:表中存儲的數據按照索引的順序存儲,檢索效率比普通索引高,但對數據新增/修改/刪除的影響比較大
特點:
(1) 一個表可以最多可以創建249個索引
(2) 先建聚集索引才能創建非聚集索引
?? (3) 非聚集索引數據與索引不同序
?? (4) 數據與索引在不同位置
?? (5) 索引在葉節點上存儲,在葉節點上有一個"指針"直接指向要查詢的數據區域
?? (6) 數據不會根據索引鍵的順序重新排列數據
??
創建聚集索引的語法:
? create NONCLUSTERED INDEX idximpID ON EMP(empID)
2、非聚集索引:不影響表中的數據存儲順序,檢索效率比聚集索引低,對數據新增/修改/刪除的影響很少
特點:
? (1) 無索引,數據無序
? (2) 有索引,數據與索引同序
? (3) 數據會根據索引鍵的順序重新排列數據
? (4) 一個表只能有一個索引
? (5) 葉節點的指針指向的數據也在同一位置存儲
語法:
create CLUSTERED INDEX idxempID on emp(empID)
3、惟一索引:惟一索引可以確保索引列不包含重復的值.
可以用多個列,但是索引可以確保索引列中每個值組合都是唯一的
姓? 名
李? 二
張? 三
王? 五
語法: create unique index idxempid on emp(姓,名)
4、復合索引:如果在兩上以上的列上創建一個索引,則稱為復合索引。
那么,不可能有兩行的姓和名是重復的
語法:
create index indxfullname on addressbook(firstname,lastname)
5、系統自建的索引:在使用T_sql語句創建表的時候使用PRIMARY KEY或UNIQUE約束時,會在表上自動創建一個惟一索引
自動創建的索引是無法刪除的
語法:
create table ABc
( empID int primary key,
? firstname varchar(50)UNIQUE,
? lastname? varchar(50)UNIQUE,
)
這樣的結果就出來了三個索引,但只有一個聚集索引哦
6、創建索引的方法:
1、企業管理器中
?? (1)右擊某個表,所有任務---管理索引,打開管理索引,單擊“新建”就可以創建索引
?? (2)在設計表中進行設計表,管理索引/鍵
?? (3)在關系圖中,添加表后右擊關系圖中的某個表,就有“索引/鍵”
?? (4)通過向導,數據庫---創建索引向導
?? (5)通過T-SQL語句
2、能過“索引優化向導”來優化索引的向導,通過它可以決定選擇哪些列做為索引列
?
實驗的流程:
1、先創建一個表,然后查看一下他的占用資源情況及select * from 表
??? 看一下排序
2、然后創建索引,在觀看一下占用資源的情況,及排序情況,看看聚集與非聚集的排序是
否用變化
答案是:聚集的有變化,非聚集的排序與未創建索引之前一樣
內聯結、外聯結、左聯結、右聯結
Posted on 2007-09-11 20:49 水清木華 閱讀(18) 評論(0)? 編輯? 收藏?
1. 內聯結:將兩個表中存在聯結關系的字段符合聯結關系的那些記錄形成記錄集的聯結。
2. 外聯結:分為外左聯結和外右聯結。
左聯結A、B表的意思就是將表A中的全部記錄和表B中聯結的字段與表A的聯結字段符合聯結條件的那些記錄形成的記錄集的聯結,這里注意的是最后出來的記錄集會包括表A的全部記錄。
右聯結A、B表的結果和左聯結B、A的結果是一樣的,也就是說:
Select A.name B.name From A Left Join B On A.id=B.id
和Select A.name B.name From B Right Join A on B.id=A.id執行后的結果是一樣的。
3.全聯結:將兩個表中存在聯結關系的字段的所有記錄取出形成記錄集的聯結(這個不需要記憶,只要是查詢中提到了的表的字段都會取出,無論是否符合聯結條件,因此意義不大)。
4.無聯結:不用解釋了吧,就是沒有使用聯結功能唄,也有自聯結的說法
轉載于:https://www.cnblogs.com/cutepig/archive/2007/09/26/907102.html
總結
以上是生活随笔為你收集整理的Question of the Day: Microsoft | Database, Multiple Questions in One的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS:页脚紧贴底部
- 下一篇: ASCLL码对照表02(可显示字符)