毫無(wú)疑問(wèn)旗扑,索引的存在是為了提高查詢效率而存在的捎谨。但有時(shí)索引的不正確使用反而會(huì)降低數(shù)據(jù)庫(kù)的查詢效率诫尽。
使用索引時(shí)禀酱,首先要考慮的是創(chuàng)建索引的這張表是用來(lái)做什么的。如果這張表需要經(jīng)常性的更新牧嫉,那我們就應(yīng)該謹(jǐn)慎一些了剂跟,了解索引機(jī)制的都明白减途,索引是要針對(duì)原表來(lái)創(chuàng)建一張對(duì)應(yīng)的地址表的,對(duì)于經(jīng)常更新的表創(chuàng)建大量的索引無(wú)疑會(huì)增加更新工作的代價(jià)曹洽。
然后鳍置,我們需要考慮的便是數(shù)據(jù)的可選擇性,即給這個(gè)屬性加上索引所能代來(lái)的價(jià)值送淆,通常唯一性索引的可選擇性就很高墓捻,特別是當(dāng)我們要讀取少量數(shù)據(jù)時(shí),像主鍵這樣的唯一性索引是非常好用的坊夫。而且我們還可以多使用一些復(fù)合屬性的索引,這樣可以提高索引的重用率撤卢,例如:給A环凿、B屬性加上索引,那么這個(gè)索引對(duì)A放吩、B和AB都可使用智听。而且創(chuàng)建索引時(shí),把可選擇性較高的屬性放在前面也可增加效率渡紫。
當(dāng)可選擇性非常差時(shí)到推,索引就變成了一場(chǎng)災(zāi)難。使用索引時(shí)惕澎,我們可以將數(shù)據(jù)的讀取理解為一條一條的定向讀取莉测,而如果可選擇性非常差,我們將會(huì)讀取到大量的數(shù)據(jù)唧喉,那么索引無(wú)疑會(huì)是一件很痛苦的事捣卤。尤其是我們還無(wú)法保證我們的數(shù)據(jù)在磁盤存儲(chǔ)的無(wú)序性有多大,那么此時(shí)索引無(wú)疑是一場(chǎng)災(zāi)難八孝。
我們還應(yīng)當(dāng)考慮數(shù)據(jù)的均勻性董朝,在同一個(gè)屬性中,不同的值是否都具有數(shù)量差別并不大的元組個(gè)數(shù)干跛,這是個(gè)非常值得思考的問(wèn)題子姜。因?yàn)樗浅S锌赡茉斐刹樵冃阅艿牟环€(wěn)定。也許我們可以通過(guò)數(shù)據(jù)庫(kù)統(tǒng)計(jì)數(shù)據(jù)來(lái)提供一些決策方式楼入,但無(wú)疑數(shù)據(jù)的均勻性也是設(shè)置索引時(shí)的一個(gè)重要考慮條件哥捕。