校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > mysql 數(shù)據(jù)庫中索引原理分析說明

mysql 數(shù)據(jù)庫中索引原理分析說明

熱門標(biāo)簽:貴州房產(chǎn)智能外呼系統(tǒng)供應(yīng)商 小e電話機(jī)器人 鎮(zhèn)江網(wǎng)路外呼系統(tǒng)供應(yīng)商 申請400電話在哪辦理流程 外呼運(yùn)營商線路收費(fèi) 電銷外呼有錄音系統(tǒng)有哪些 百度地圖標(biāo)注改顏色 臨沂智能電銷機(jī)器人加盟哪家好 一個導(dǎo)航軟件能用幾個地圖標(biāo)注點
下面,我們舉例來說明一下聚集索引和非聚集索引的區(qū)別:
其實,我們的漢語字典的正文本身就是一個聚集索引。比如,我們要查“安”字,就會很自然地翻開字典的前幾頁,因為“安”的拼音是“an”,而按照拼音排序漢字的字典是以英文字母“a”開頭并以“z”結(jié)尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”開頭的部分仍然找不到這個字,那么就說明您的字典中沒有這個字;同樣的,如果查“張”字,那您也會將您的字典翻到最后部分,因為“張”的拼音是“zhang”。也就是說,字典的正文部分本身就是一個目錄,您不需要再去查其他目錄來找到您需要找的內(nèi)容。
我們把這種正文內(nèi)容本身就是一種按照一定規(guī)則排列的目錄稱為“聚集索引”。
如果您認(rèn)識某個字,您可以快速地從自動中查到這個字。但您也可能會遇到您不認(rèn)識的字,不知道它的發(fā)音,這時候,您就不能按照剛才的方法找到您要查的字,而需要去根據(jù)“偏旁部首”查到您要找的字,然后根據(jù)這個字后的頁碼直接翻到某頁來找到您要找的字。但您結(jié)合“部首目錄”和“檢字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“張”字,我們可以看到在查部首之后的檢字表中“張”的頁碼是672頁,檢字表中“張”的上面是“馳”字,但頁碼卻是63 頁,“張”的下面是“弩”字,頁面是390頁。很顯然,這些字并不是真正的分別位于“張”字的上下方,現(xiàn)在您看到的連續(xù)的“馳、張、弩”三字實際上就是他們在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我們可以通過這種方式來找到您所需要的字,但它需要兩個過程,先找到目錄中的結(jié)果,然后再翻到您所需要的頁碼。
我們把這種目錄純粹是目錄,正文純粹是正文的排序方式稱為“非聚集索引”。
通過以上例子,我們可以理解到什么是“聚集索引”和“非聚集索引”。
進(jìn)一步引申一下,我們可以很容易的理解:每個表只能有一個聚集索引,因為目錄只能按照一種方法進(jìn)行排序。
(二)何時使用聚集索引或非聚集索引
下面的表總結(jié)了何時使用聚集索引或非聚集索引(很重要)。
動作描述 列經(jīng)常被分組排序 返回某范圍內(nèi)的數(shù)據(jù) 一個或極少不同值 小數(shù)目的不同 大數(shù)目的不同值 頻繁更新的列 外鍵列 主鍵列 頻繁修改索引列
使用聚集索引 應(yīng) 應(yīng) 不應(yīng) 不應(yīng) 不應(yīng) 不應(yīng) 應(yīng) 應(yīng) 不應(yīng)
不使用聚集索引 應(yīng) 不應(yīng) 不應(yīng) 不應(yīng) 應(yīng) 應(yīng) 應(yīng) 應(yīng) 應(yīng)

事實上,我們可以通過前面聚集索引和非聚集索引的定義的例子來理解上表。如:返回某范圍內(nèi)的數(shù)據(jù)一項。比如您的某個表有一個時間列,恰好您把聚合索引建立在了該列,這時您查詢2004年1月1日至2004年10月1日之間的全部數(shù)據(jù)時,這個速度就將是很快的,因為您的這本字典正文是按日期進(jìn)行排序的,聚類索引只需要找到要檢索的所有數(shù)據(jù)中的開頭和結(jié)尾數(shù)據(jù)即可;而不像非聚集索引,必須先查到目錄中查到每一項數(shù)據(jù)對應(yīng)的頁碼,然后再根據(jù)頁碼查到具體內(nèi)容。
(三)結(jié)合實際,談索引使用的誤區(qū)
理論的目的是應(yīng)用。雖然我們剛才列出了何時應(yīng)使用聚集索引或非聚集索引,但在實踐中以上規(guī)則卻很容易被忽視或不能根據(jù)實際情況進(jìn)行綜
合分析。下面我們將根據(jù)在實踐中遇到的實際問題來談一下索引使用的誤區(qū),以便于大家掌握索引建立的方法。
1、主鍵就是聚集索引
這種想法筆者認(rèn)為是極端錯誤的,是對聚集索引的一種浪費(fèi)。雖然SQL SERVER默認(rèn)是在主鍵上建立聚集索引的。
通常,我們會在每個表中都建立一個ID列,以區(qū)分每條數(shù)據(jù),并且這個ID列是自動增大的,步長一般為1。我們的這個辦公自動化的實例中的列Gid就是如此。此時,如果我們將這個列設(shè)為主鍵,SQL SERVER會將此列默認(rèn)為聚集索引。這樣做有好處,就是可以讓您的數(shù)據(jù)在數(shù)據(jù)庫中按照ID進(jìn)行物理排序,但筆者認(rèn)為這樣做意義不大。
顯而易見,聚集索引的優(yōu)勢是很明顯的,而每個表中只能有一個聚集索引的規(guī)則,這使得聚集索引變得更加珍貴。
從我們前面談到的聚集索引的定義我們可以看出,使用聚集索引的最大好處就是能夠根據(jù)查詢要求,迅速縮小查詢范圍,避免全表掃描。在實際應(yīng)用中,因為ID號是自動生成的,我們并不知道每條記錄的ID號,所以我們很難在實踐中用ID號來進(jìn)行查詢。這就使讓ID號這個主鍵作為聚集索引成為一種資源浪費(fèi)。其次,讓每個ID號都不同的字段作為聚集索引也不符合“大數(shù)目的不同值情況下不應(yīng)建立聚合索引”規(guī)則;當(dāng)然,
這種情況只是針對用戶經(jīng)常修改記錄內(nèi)容,特別是索引項的時候會負(fù)作用,但對于查詢速度并沒有影響。
在辦公自動化系統(tǒng)中,無論是系統(tǒng)首頁顯示的需要用戶簽收的文件、會議還是用戶進(jìn)行文件查詢等任何情況下進(jìn)行數(shù)據(jù)查詢都離不開字段的是“日期”還有用戶本身的“用戶名”。
通常,辦公自動化的首頁會顯示每個用戶尚未簽收的文件或會議。雖然我們的where語句可以僅僅限制當(dāng)前用戶尚未簽收的情況,但如果您的系統(tǒng)已建立了很長時間,并且數(shù)據(jù)量很大,那么,每次每個用戶打開首頁的時候都進(jìn)行一次全表掃描,這樣做意義是不大的,絕大多數(shù)的用戶1個月前的文件都已經(jīng)瀏覽過了,這樣做只能徒增數(shù)據(jù)庫的開銷而已。事實上,我們完全可以讓用戶打開系統(tǒng)首頁時,數(shù)據(jù)庫僅僅查詢這個用戶近3個月來未閱覽的文件,通過“日期”這個字段來限制表掃描,提高查詢速度。如果您的辦公自動化系統(tǒng)已經(jīng)建立的2年,那么您的首頁顯示速度理論上將是原來速度8倍,甚至更快。
在這里之所以提到“理論上”三字,是因為如果您的聚集索引還是盲目地建在ID這個主鍵上時,您的查詢速度是沒有這么高的,即使您在“日
期”這個字段上建立的索引(非聚合索引)。下面我們就來看一下在1000萬條數(shù)據(jù)量的情況下各種查詢的速度表現(xiàn)(3個月內(nèi)的數(shù)據(jù)為25萬條)

(1)僅在主鍵上建立聚集索引,并且不劃分時間段:
Select gid,fariqi,neibuyonghu,title from tgongwen
用時:128470毫秒(即:128秒)
(2)在主鍵上建立聚集索引,在fariq上建立非聚集索引:
select gid,fariqi,neibuyonghu,title from Tgongwen
where fariqi> dateadd(day,-90,getdate())
用時:53763毫秒(54秒)
(3)將聚合索引建立在日期列(fariqi)上:
select gid,fariqi,neibuyonghu,title from Tgongwen
where fariqi> dateadd(day,-90,getdate())
用時:2423毫秒(2秒)
雖然每條語句提取出來的都是25萬條數(shù)據(jù),各種情況的差異卻是巨大的,特別是將聚集索引建立在日期列時的差異。事實上,如果您的數(shù)據(jù)庫真的有1000萬容量的話,把主鍵建立在ID列上,就像以上的第1、2種情況,在網(wǎng)頁上的表現(xiàn)就是超時,根本就無法顯示。這也是我摒棄ID列作為聚集索引的一個最重要的因素。
得出以上速度的方法是:在各個select語句前加:declare @d datetime
set @d=getdate()
并在select語句后加:
select [語句執(zhí)行花費(fèi)時間(毫秒)]=datediff(ms,@d,getdate())
2、只要建立索引就能顯著提高查詢速度
事實上,我們可以發(fā)現(xiàn)上面的例子中,第2、3條語句完全相同,且建立索引的字段也相同;不同的僅是前者在fariqi字段上建立的是非聚合索引,后者在此字段上建立的是聚合索引,但查詢速度卻有著天壤之別。所以,并非是在任何字段上簡單地建立索引就能提高查詢速度。
從建表的語句中,我們可以看到這個有著1000萬數(shù)據(jù)的表中fariqi字段有5003個不同記錄。在此字段上建立聚合索引是再合適不過了。在現(xiàn)實中,我們每天都會發(fā)幾個文件,這幾個文件的發(fā)文日期就相同,這完全符合建立聚集索引要求的:“既不能絕大多數(shù)都相同,又不能只有極少數(shù)相同”的規(guī)則。由此看來,我們建立“適當(dāng)”的聚合索引對于我們提高查詢速度是非常重要的。
3、把所有需要提高查詢速度的字段都加進(jìn)聚集索引,以提高查詢速度。上面已經(jīng)談到:在進(jìn)行數(shù)據(jù)查詢時都離不開字段的是“日期”還有用戶本身的“用戶名”。既然這兩個字段都是如此的重要,我們可以把他們合并起來,建立一個復(fù)合索引(compound index)。
很多人認(rèn)為只要把任何字段加進(jìn)聚集索引,就能提高查詢速度,也有人感到迷惑:如果把復(fù)合的聚集索引字段分開查詢,那么查詢速度會減慢嗎?帶著這個問題,我們來看一下以下的查詢速度(結(jié)果集都是25萬條數(shù)據(jù)):(日期列fariqi首先排在復(fù)合聚集索引的起始列,用戶名neibuyonghu排在后列)
(1)select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>'2004-5-5'
查詢速度:2513毫秒
(2)select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>'2004-5-5' and neibuyonghu='辦公室'
查詢速度:2516毫秒
(3)select gid,fariqi,neibuyonghu,title from Tgongwen where neibuyonghu='辦公室'
查詢速度:60280毫秒
從以上試驗中,我們可以看到如果僅用聚集索引的起始列作為查詢條件和同時用到復(fù)合聚集索引的全部列的查詢速度是幾乎一樣的,甚至比用上全部的復(fù)合索引列還要略快(在查詢結(jié)果集數(shù)目一樣的情況下);而如果僅用復(fù)合聚集索引的非起始列作為查詢條件的話,這個索引是不起任何作用的。當(dāng)然,語句1、2的查詢速度一樣是因為查詢的條目數(shù)一樣,如果復(fù)合索引的所有列都用上,而且查詢結(jié)果少的話,這樣就會形成“索引覆蓋”,因而性能可以達(dá)到最優(yōu)。同時,請記住:無論您是否經(jīng)常使用聚合索引的其他列,但其前導(dǎo)列一定要是使用最頻繁的列。
(四)其他書上沒有的索引使用經(jīng)驗總結(jié)
1、用聚合索引比用不是聚合索引的主鍵速度快
下面是實例語句:(都是提取25萬條數(shù)據(jù))
select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi='2004-9-16'
使用時間:3326毫秒
select gid,fariqi,neibuyonghu,reader,title from Tgongwen where gid=250000
使用時間:4470毫秒
這里,用聚合索引比用不是聚合索引的主鍵速度快了近1/4。
2、用聚合索引比用一般的主鍵作order by時速度快,特別是在小數(shù)據(jù)量情況下
select gid,fariqi,neibuyonghu,reader,title from Tgongwen order by fariqi
用時:12936
select gid,fariqi,neibuyonghu,reader,title from Tgongwen order by gid
用時:18843
這里,用聚合索引比用一般的主鍵作order by時,速度快了3/10。事實上,如果數(shù)據(jù)量很小的話,用聚集索引作為排序列要比使用非聚集索引速度快得明顯的多;而數(shù)據(jù)量如果很大的話,如10萬以上,則二者的速度差別不明顯。
3、使用聚合索引內(nèi)的時間段,搜索時間會按數(shù)據(jù)占整個數(shù)據(jù)表的百分比成比例減少,而無論聚合索引使用了多少個
select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>'2004-1-1'
用時:6343毫秒(提取100萬條)
select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>'2004-6-6'
用時:3170毫秒(提取50萬條)
select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi='2004-9-16'
用時:3326毫秒(和上句的結(jié)果一模一樣。如果采集的數(shù)量一樣,那么用大于號和等于號是一樣的)
select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>'2004-1-1' and fariqi'2004-6-6'
用時:3280毫秒
4 、日期列不會因為有分秒的輸入而減慢查詢速度
下面的例子中,共有100萬條數(shù)據(jù),2004年1月1日以后的數(shù)據(jù)有50萬條,但只有兩個不同的日期,日期精確到日;之前有數(shù)據(jù)50萬條,有5000個
不同的日期,日期精確到秒。
select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>'2004-1-1' order by fariqi
用時:6390毫秒
select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi'2004-1-1' order by fariqi
用時:6453毫秒
您可能感興趣的文章:
  • MySQL中有哪些情況下數(shù)據(jù)庫索引會失效詳析
  • mysql數(shù)據(jù)庫索引損壞及修復(fù)經(jīng)驗分享
  • MySQL 聯(lián)合索引與Where子句的優(yōu)化 提高數(shù)據(jù)庫運(yùn)行效率
  • 如何提高M(jìn)YSQL數(shù)據(jù)庫的查詢統(tǒng)計速度 select 索引應(yīng)用
  • Mysql數(shù)據(jù)庫索引面試題(程序員基礎(chǔ)技能)

標(biāo)簽:保定 合肥 三明 晉城 延邊 嘉興 日照 澳門

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql 數(shù)據(jù)庫中索引原理分析說明》,本文關(guān)鍵詞  mysql,數(shù)據(jù)庫,中,索引,原理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql 數(shù)據(jù)庫中索引原理分析說明》相關(guān)的同類信息!
  • 本頁收集關(guān)于mysql 數(shù)據(jù)庫中索引原理分析說明的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    在线免费观看成人短视频| 欧美日韩夫妻久久| 亚洲成人av资源| 久久久.com| 欧美精品乱码久久久久久按摩| caoporm超碰国产精品| 久久精品国产999大香线蕉| 亚洲激情中文1区| 国产欧美日韩精品一区| 日韩欧美一区二区视频| 国产一区啦啦啦在线观看| 亚洲午夜在线视频| 亚洲国产成人精品视频| 久久99久久久久久久久久久| 婷婷成人综合网| 亚洲午夜久久久久| 国内精品国产三级国产a久久| 老司机免费视频一区二区| av午夜一区麻豆| 91精品国产综合久久福利软件| 日韩精品一区二区三区在线| 国产精品你懂的| 国产精品久久二区二区| 国产精品福利在线播放| 性做久久久久久免费观看欧美| 国产成人啪午夜精品网站男同| 国产成人综合网| 6080日韩午夜伦伦午夜伦| 日韩一级完整毛片| 亚洲图片另类小说| 亚洲一区在线观看免费| 天天做天天摸天天爽国产一区 | 欧美日韩国产系列| 欧美国产亚洲另类动漫| 亚洲欧洲精品成人久久奇米网| 亚洲日本va午夜在线影院| 久久精品国产久精国产爱| 欧洲精品在线观看| 国产精品国产馆在线真实露脸| 日本午夜一本久久久综合| 麻豆一区二区三| 成人高清免费观看| 在线亚洲高清视频| 中国色在线观看另类| 激情成人综合网| 日韩午夜小视频| 午夜视频在线观看一区二区 | 亚洲视频 欧洲视频| 国模套图日韩精品一区二区 | 国产一区二区三区国产| 欧美人牲a欧美精品| 亚洲精品久久7777| www.亚洲免费av| 国产午夜亚洲精品理论片色戒| 男女性色大片免费观看一区二区| 国产一二精品视频| 日韩一级在线观看| 日本午夜精品一区二区三区电影 | 日韩av成人高清| 欧美色网一区二区| 日韩视频一区二区在线观看| 午夜欧美一区二区三区在线播放| 色综合夜色一区| 欧美乱熟臀69xxxxxx| 亚洲最色的网站| 国产乱国产乱300精品| 91玉足脚交白嫩脚丫在线播放| 欧美一区国产二区| 奇米四色…亚洲| 欧美一区二区黄| 蜜臀av性久久久久蜜臀av麻豆| 欧美一级在线免费| 日av在线不卡| 日韩欧美资源站| 国模大尺度一区二区三区| 久久影院午夜片一区| 亚洲成国产人片在线观看| 欧美日韩三级在线| 国产精品护士白丝一区av| 成+人+亚洲+综合天堂| 最新日韩av在线| 91论坛在线播放| 亚洲综合免费观看高清完整版 | 亚洲愉拍自拍另类高清精品| 在线视频欧美精品| 亚洲国产欧美在线人成| 欧美男同性恋视频网站| 美女尤物国产一区| 2024国产精品| 成人高清视频在线观看| 一区二区三区av电影| 欧美日韩国产综合久久| 日韩av一级片| 久久综合九色综合欧美就去吻| 国产成人在线网站| 亚洲人精品午夜| 成人av网在线| 亚洲一区中文日韩| 日韩久久精品一区| 成人性视频免费网站| 欧美va日韩va| 日本不卡一二三| 久久人人爽人人爽| 久久99久久99小草精品免视看| 久久毛片高清国产| 91一区一区三区| 天天综合网天天综合色| 国产亚洲自拍一区| 色婷婷av久久久久久久| 亚洲视频小说图片| 欧美一区中文字幕| 国产黄色91视频| 亚洲特级片在线| 日韩一区二区三区av| 成人伦理片在线| 亚洲午夜在线电影| 国产午夜亚洲精品不卡| 色爱区综合激月婷婷| 亚洲色图另类专区| 91精品福利在线一区二区三区 | 欧美电影精品一区二区| 成人avav在线| 一区二区日韩电影| 欧美大黄免费观看| 91免费在线看| 久久国内精品自在自线400部| 亚洲欧洲精品一区二区精品久久久| 欧美二区三区91| 99久久国产综合精品麻豆| 亚洲精品中文字幕在线观看| 欧美一级高清大全免费观看| 不卡影院免费观看| 久久成人免费网站| 亚洲一区二区在线免费看| 久久久久久久久久久99999| 欧美日韩视频一区二区| 成人app软件下载大全免费| 免费三级欧美电影| 亚洲精品日韩一| 国产日韩欧美不卡在线| 日韩一区二区三区在线观看 | 亚洲成人先锋电影| 日本一二三四高清不卡| 日韩午夜三级在线| 欧美午夜精品久久久久久超碰| 国产成人免费在线观看| 老司机精品视频导航| 亚洲一区二区av在线| 亚洲欧洲三级电影| 26uuuu精品一区二区| 欧美日韩在线免费视频| 99视频热这里只有精品免费| 狠狠色狠狠色综合系列| 日本成人在线网站| 亚洲电影第三页| 伊人色综合久久天天| 国产精品日韩精品欧美在线| 欧美成人三级在线| 这里只有精品视频在线观看| 色婷婷国产精品综合在线观看| 国产成人精品免费在线| 精品一区二区av| 美腿丝袜亚洲三区| 日韩精品高清不卡| 国产网站一区二区三区| 欧美videofree性高清杂交| 欧美精品视频www在线观看 | 亚洲电影你懂得| 一区二区三区资源| 亚洲日本va午夜在线电影| 中文字幕av一区 二区| 久久久久9999亚洲精品| 久久综合久久99| 久久一日本道色综合| 欧美精品一区二区在线播放| eeuss国产一区二区三区| 高清视频一区二区| 性欧美大战久久久久久久久| 亚洲一区二区视频在线观看| 亚洲免费av网站| 一区二区久久久久| 亚洲影视在线观看| 午夜婷婷国产麻豆精品| 午夜电影一区二区| 丝袜国产日韩另类美女| 日韩国产欧美在线观看| 免费成人结看片| 麻豆精品视频在线观看免费| 裸体一区二区三区| 国内成+人亚洲+欧美+综合在线 | 国产精品动漫网站| 亚洲日本在线看| 亚洲综合色网站| 偷偷要91色婷婷| 久久99国内精品| 懂色av噜噜一区二区三区av| 不卡的av电影| 在线观看视频一区二区 | 老司机午夜精品| 国产精品一品视频|