MySQL索引總結(jié)

使用索引查詢時(shí),把索引列單獨(dú)放在表達(dá)式一側(cè)(id<4)覆履,否則索引可能無法生效(id-1<4);

索引的選擇性:索引不重復(fù)記錄條數(shù)/總記錄條數(shù)蹋盆,選擇性越高性能越好。

掃描索引本身很快硝全,但是如果索引不能覆蓋查詢所需的所有列栖雾,那就不得不每掃描一條記錄就都回表查詢一次對應(yīng)的行,這基本都是隨機(jī)I/O柳沙。所以按索引順序讀取數(shù)據(jù)的速度通常要要比順序的全表掃描要慢岩灭,尤其是I/O密集的工作負(fù)載時(shí)。(當(dāng)索引出大量結(jié)果需要一個(gè)個(gè)回表查詢時(shí)赂鲤,速度慢)

二級索引的葉子節(jié)點(diǎn)指向主鍵噪径,所以二級索引自帶主鍵,(column1)=(column1, id )数初。

查看表索引:

show keys(或index) from table_name\G

新建表索引:column_name(length)找爱,length可選,表示前綴索引泡孩。

create index index_name on table_name (column_name1(length), cloumn_name2);

alter table table_name add index index_name(column_name(length));

刪除表索引:

alter table table_name drop index index_name;

指定MySQL使用/忽略索引:

select * from table_nameuse/force/ignoreindex(index_name1,index_name2....) where....;

索引原理:

避免了全表掃描车摄,innodb引擎采用B+樹索引,所有的值都是按順序存儲(chǔ)的仑鸥,從索引根節(jié)點(diǎn)開始搜索吮播,比較節(jié)點(diǎn)頁的值和要查找的值,判斷要不要進(jìn)入下一個(gè)節(jié)點(diǎn)眼俊,最終存儲(chǔ)引擎要么找到對應(yīng)的值意狠,要么值不存在。

B+樹示意

普通索引匹配原則:

最左前綴原則:索引必須從索引定義的第一個(gè)列開始匹配疮胖,如果第一個(gè)(左邊)列使用范圍匹配环戈,則后面所有列索引失效。如果范圍匹配的是字符串澎灸,則必須like 'xx%'而不能like '%xx'或者%xxx%院塞。

使用in(value1, value2)多個(gè)等值,后續(xù)條件可以使用索引性昭,如果使用<或>等范圍匹配拦止,則后續(xù)條件不能使用索引。

order by索引:

只有當(dāng)索引的列順序和order by字句順序完全一致糜颠,并且所有列的排序方向(倒序或正序)都一樣時(shí)创泄,MySQL才能使用索引對結(jié)果進(jìn)行排序艺玲。如果查詢需要關(guān)聯(lián)多張表括蝠,則只有當(dāng)order by子句引用字段都是第一個(gè)表時(shí)鞠抑,才能用索引進(jìn)行排序。并且索引排序也需要滿足最左前綴要求忌警。否則無法用索引排序搁拙,將使用文件排序。

(rental_data, inventory_id, customer_id)

例:

select rental_id, staff_id from sakila.rental

where rental_date = '2005-05-25'

order by inventory_id, customer_id desc

例:

select rental_id, staff_id from sakila.rental

where rental_date = '2005-05-25'

order by inventory_id desc

索引優(yōu)勢:

索引大大減少了服務(wù)器需要掃描的數(shù)據(jù)量法绵。

索引可以幫助服務(wù)器避免排序和零食表箕速。

索引可以將隨機(jī)I/O變?yōu)轫樞騃/O。

哈希索引:

索引中不直接存儲(chǔ)列的值朋譬,把列的hash值當(dāng)作索引盐茎,所以即使hash指是有序的但實(shí)際列是無需的,所以無法用于排序徙赢,匹配時(shí)只能精準(zhǔn)匹配字柠,比較符使用,=狡赐,<=>窑业,in()。hash碰撞低的時(shí)候性能優(yōu)秀枕屉,碰撞高性能則低常柄。

innodb不支持直接創(chuàng)建hash索引,但是有“自適應(yīng)hash索引”搀擂,即當(dāng)innodb發(fā)現(xiàn)某個(gè)索引使用頻繁會(huì)自動(dòng)在b-tree之上再創(chuàng)建一個(gè)hash索引西潘。這是完全自動(dòng)的,用戶無法控制哨颂,但可以關(guān)閉此功能喷市。當(dāng)需要對長字符做索引時(shí),建議加一列hash值列作為索引列咆蒿。

前綴索引:

對于長字符串可以使用前綴索引提高查詢性能东抹。

覆蓋索引:

如果索引的葉子節(jié)點(diǎn)中包含所要查詢的所有數(shù)據(jù)則無需回表查詢,我們稱之為覆蓋索引沃测。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缭黔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蒂破,更是在濱河造成了極大的恐慌馏谨,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件附迷,死亡現(xiàn)場離奇詭異惧互,居然都是意外死亡哎媚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門喊儡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拨与,“玉大人,你說我怎么就攤上這事艾猜÷蛐” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵匆赃,是天一觀的道長淤毛。 經(jīng)常有香客問我,道長算柳,這世上最難降的妖魔是什么低淡? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮瞬项,結(jié)果婚禮上蔗蹋,老公的妹妹穿的比我還像新娘。我一直安慰自己滥壕,他們只是感情好纸颜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绎橘,像睡著了一般胁孙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上称鳞,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天涮较,我揣著相機(jī)與錄音,去河邊找鬼冈止。 笑死狂票,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的熙暴。 我是一名探鬼主播闺属,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼周霉!你這毒婦竟也來了掂器?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤俱箱,失蹤者是張志新(化名)和其女友劉穎国瓮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乃摹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年禁漓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孵睬。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡播歼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肪康,到底是詐尸還是另有隱情荚恶,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布磷支,位于F島的核電站,受9級特大地震影響食寡,放射性物質(zhì)發(fā)生泄漏雾狈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一抵皱、第九天 我趴在偏房一處隱蔽的房頂上張望善榛。 院中可真熱鬧,春花似錦呻畸、人聲如沸移盆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咒循。三九已至,卻和暖如春绞愚,著一層夾襖步出監(jiān)牢的瞬間叙甸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工位衩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裆蒸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓糖驴,卻偏偏與公主長得像僚祷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子贮缕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 索引總結(jié) ?????????????????????????????????--Kane 1. 索引 ??每個(gè)In...
    未名枯草閱讀 1,072評論 0 1
  • 一 索引的本質(zhì) MySQL官方對索引的定義為:索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)辙谜。提取句子主...
    稀里糊涂司小呆閱讀 355評論 1 4
  • 文章歸屬:http://feiyan.info/16.html,我想自己去寫了跷睦,但是發(fā)現(xiàn)此君總結(jié)的非常詳細(xì)筷弦。直接搬...
    史史小子閱讀 1,190評論 0 5
  • 例如:數(shù)據(jù)庫中2萬條記錄,如果要執(zhí)行一個(gè)查詢,select * from table where num =10...
    alpacino_1010閱讀 383評論 0 2
  • 攜手相將,不為此生。年輕的自己總是想要設(shè)么都知道烂琴,可是人還有一種權(quán)利就是什么都不用知道爹殊。 素枕紅塵書寫段段傳奇,藕...
    茉m閱讀 355評論 0 0