成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你能說出SQL聚集索引和非聚集索引的區別嗎?

數據庫
最近突然想起前一陣和一朋友的聊天,當時他問我的問題是一個非常普通的問題:說說SQL聚集索引和非聚集索引的區別。

其實對于非專業的數據庫操作人員來講,例如軟件開發人員,在很大程度上都搞不清楚數據庫索引的一些基本知識,有些是知其一不知其二,或者是知其然不知其所以然。造成這種情況的主要原因我覺的是行業原因,有很多公司都有自己的DBA團隊,他們會幫助你優化SQL,開發人員即使不懂優化問題也不大,所以開發人員對這方面也就不會下太多功夫去了解SQL優化,但如果公司沒有這樣的DBA呢,就只能靠程序員自己了。 最近突然想起前一陣和一朋友的聊天,當時他問我的問題是一個非常普通的問題:說說SQL聚集索引和非聚集索引的區別。

大家可能認為這個問題難度不大,認為太熟悉了,也許不會感興趣,但你真能說清楚嗎?其實要想說明白這兩者的差別也不是三兩句就說的清的,那天我也是覺的這問題太泛了,就隨便說了其中的兩個區別:

  1. 聚集索引一個表只能有一個,而非聚集索引一個表可以存在多個,這個跟沒問題沒差別,一般人都知道。
  2. 聚集索引存儲記錄是物理上連續存在,而非聚集索引是邏輯上的連續,物理存儲并不連續,這個大家也都知道。

上面的兩點從大的方面講都是講的通的,后面我們繼續探討,舉一個實際點的例子,一個學生表student,里面是學生號id,學生姓名,學生所在城市ID,學生成績(總分)。

問:如果想按姓名查詢,如何做優化?

答:在姓名字段上建立索引。

問:建立什么類型的索引?

答:建立非聚集索引。

問:為什么?

答:一般有范圍查詢的需求,可以考慮在此字段上創建聚集索引。

問:學分有重復性,在學分字段上創建聚集索引能行嗎?

....沉思,不能創建嗎?之前的項目好像真這樣做過,答:應該可以吧。

問:聚集索引的約束是什么?

答:唯一性啊?

問:既然是唯一性,那么學分字段上還能創建聚集索引嗎?

....再次沉思,應該可以啊,但索引的約束又怎么說呢?答:應該可以的,以前用過。

我自認為是對數據庫索引知識有一定研究的,但可能是有兩年沒實際接觸SQL的原因,一時還真想不出具有說服力的解釋,朋友們看到這能解答我的問題嗎?

其實上面的我們需要搞清楚以下幾個問題:

第一:聚集索引的約束是唯一性,是否要求字段也是唯一的呢?

分析:如果認為是的朋友,可能是受系統默認設置的影響,一般我們指定一個表的主鍵,如果這個表之前沒有聚集索引,同時建立主鍵時候沒有強制指定使用非聚集索引,SQL會默認在此字段上創建一個聚集索引,而主鍵都是唯一的,所以理所當然的認為創建聚集索引的字段也需要唯一。

結論:聚集索引可以創建在任何一列你想創建的字段上,這是從理論上講,實際情況并不能隨便指定,否則在性能上會是惡夢。

第二:為什么聚集索引可以創建在任何一列上,如果此表沒有主鍵約束,即有可能存在重復行數據呢?

粗一看,這還真是和聚集索引的約束相背,但實際情況真可以創建聚集索引。

分析其原因是:如果未使用 UNIQUE 屬性創建聚集索引,數據庫引擎將向表自動添加一個四字節 uniqueifier 列。必要時,數據庫引擎 將向行自動添加一個 uniqueifier 值,使每個鍵唯一。此列和列值供內部使用,用戶不能查看或訪問。

第三:是不是聚集索引就一定要比非聚集索引性能優呢?

如果想查詢學分在60-90之間的學生的學分以及姓名,在學分上創建聚集索引是否是最優的呢?

答:否。既然只輸出兩列,我們可以在學分以及學生姓名上創建聯合非聚集索引,此時的索引就形成了覆蓋索引,即索引所存儲的內容就是最終輸出的數據,這種索引在比以學分為聚集索引做查詢性能更好。

第四:在數據庫中通過什么描述聚集索引與非聚集索引的?

索引是通過二叉樹的形式進行描述的,我們可以這樣區分聚集與非聚集索引的區別:聚集索引的葉節點就是最終的數據節點,而非聚集索引的葉節仍然是索引節點,但它有一個指向最終數據的指針。

第五:在主鍵是創建聚集索引的表在數據插入上為什么比主鍵上創建非聚集索引表速度要慢?

有了上面第四點的認識,我們分析這個問題就有把握了,在有主鍵的表中插入數據行,由于有主鍵唯一性的約束,所以需要保證插入的數據沒有重復。我們來比較下主鍵為聚集索引和非聚集索引的查找情況:聚集索引由于索引葉節點就是數據頁,所以如果想檢查主鍵的唯一性,需要遍歷所有數據節點才行,但非聚集索引不同,由于非聚集索引上已經包含了主鍵值,所以查找主鍵唯一性,只需要遍歷所有的索引頁就行,這比遍歷所有數據行減少了不少IO消耗。這就是為什么主鍵上創建非聚集索引比主鍵上創建聚集索引在插入數據時要快的真正原因。

好了,講這這些,不知道大家是否真的了解SQL的聚焦索引,我也是數據庫新手(從使用時間上來講也不算新了,哈哈),不專業,有什么不對的地方,希望大家批評指正,下篇我會分析一些數據庫訪問索引的情況,有圖的情況下,也許看的更加明白。

原文鏈接:http://www.cnblogs.com/mybluesky99/archive/2011/04/21/2023629.html

 

【編輯推薦】

  1. MongoDB學習筆記(六) MongoDB索引用法和效率分析
  2. SQL Server索引結構及其使用
  3. 程序員你真的了解SQL索引嗎?
  4. Sybase建立索引的原則
責任編輯:艾婧 來源: 博客園
相關推薦

2010-07-19 16:26:05

SQL Server非

2022-11-28 07:25:52

MySQL聚集索引

2010-07-20 13:20:26

SQL Server聚

2010-07-20 12:46:23

SQL Server聚

2015-10-30 15:55:43

MySQL

2010-07-07 11:20:02

SQL Server聚

2014-08-28 10:06:57

SQL Server

2023-06-05 08:07:34

聚集索引存儲數據

2010-07-19 16:17:41

SQL Server聚

2011-03-30 11:28:31

SQL Server聚集索引

2022-03-25 10:38:40

索引MySQL數據庫

2019-12-30 09:28:53

Kafka集群ZooKeeper

2010-09-27 11:24:37

SQL聚簇索引

2010-07-14 15:04:53

SQL Sever索引

2011-08-30 16:43:32

SQL Server

2012-02-29 09:44:54

MySQL

2017-07-06 08:12:02

索引查詢SQL

2010-10-12 13:42:11

MySQL單列索引

2010-09-16 13:42:55

SQL SERVER索

2010-07-20 12:35:33

SQL Server索
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 涩涩导航| 免费午夜电影 | www.日韩高清 | 日韩精品在线一区 | 日日夜夜精品视频 | 精品一区二区视频 | 天天色天天 | 天天操 夜夜操 | 国产高清视频在线播放 | 欧美精品成人一区二区三区四区 | 国产精品视频999 | 一区二区三区四区不卡 | 北条麻妃一区二区三区在线视频 | 欧美电影免费观看 | 日本午夜在线视频 | 色综网 | 美女一区 | 免费视频一区二区 | 色视频在线播放 | 精品欧美乱码久久久久久1区2区 | 成人免费视频网站在线观看 | 97色在线观看免费视频 | 国产精品久久久久久妇女6080 | 国产精品国产三级国产aⅴ中文 | 成人午夜网 | 91精品国产综合久久精品 | 欧美日韩国产精品 | 久久久成人精品 | 国产男女精品 | 羞羞视频网站在线观看 | av在线播放网站 | 国产成人一区二区三区 | 成人午夜性成交 | 夜夜爽99久久国产综合精品女不卡 | 精品久久久久久久久久久 | 欧美三区在线观看 | 在线观看成人小视频 | 欧美伊人影院 | 91视频久久 | 日韩在线一区二区三区 | 亚洲视频一区二区三区 |