MySQL索引設(shè)計(jì)一些策略_MySQL

前言

索引加快了檢索的速度,但是卻降低了數(shù)據(jù)列里插入、刪除以及修改數(shù)值的速度。也就是說,索引降低了許多涉及寫入的操作速度。之所以出現(xiàn)這種情況,是由于寫入一條數(shù)據(jù)不僅僅是要寫入到數(shù)據(jù)行,還需要所有的索引都作出相應(yīng)的改變?nèi)绺禄蚴侵匦戮幣?/strong>。mysql在為檢索生成一個(gè)執(zhí)行方案時(shí)候,要仔細(xì)對(duì)索引進(jìn)行計(jì)算,創(chuàng)建過多的索引對(duì)查詢優(yōu)化程序就加上了更多的工作,而且當(dāng)你有太多的索引的時(shí)候,mysql還有可能無法選出最好的索引來使用。于是在選擇索引的時(shí)候,需要采取一些策略。

策略1

在選擇索引列的時(shí)候,盡量為用搜索、分類或者分組的數(shù)據(jù)列編制索引,不要為作為輸出的數(shù)據(jù)列編制索引。換句話說,最合適有索引的數(shù)據(jù)列是那些在where字句中出現(xiàn)的數(shù)據(jù)列,在連接字句中給出的數(shù)據(jù)列、或是在order by或是group by子句中出現(xiàn)的數(shù)據(jù)列。

策略2

綜合考慮數(shù)據(jù)列的維度勢。數(shù)據(jù)列的維度,等于它所容納的非重復(fù)值的個(gè)數(shù)。

策略3

盡量選擇短小的值進(jìn)行索引
短小的值可以讓比較操作更快完成,加快索引查詢速度。
短小的值可以讓索引的體積更小,減少磁盤I/O活動(dòng)
短小的鍵值意味著鍵緩存里的索引塊可以容納更多的鍵值,讓MySQL可以在內(nèi)存中容納更多的鍵,這樣較少了I/O活動(dòng)的概率。
InnoDB存儲(chǔ)引擎采用的聚族索引。所謂的聚族索引就是把數(shù)據(jù)行和主鍵索引集中保存在一起,其他的索引都是二級(jí)索引,它們保存著主鍵值和二級(jí)索引值。對(duì)于二級(jí)索引查找過程是先通過二級(jí)索引找到主鍵,然后通過主鍵找到對(duì)應(yīng)的數(shù)據(jù)。選擇短小的值進(jìn)行索引,可以減少二級(jí)索引占據(jù)的空間。

策略4

為字符串值的前綴添加索引

如果打算給一個(gè)字符串列添加索引,盡可能的給出前綴長度。

策略5

不要建立過多的索引

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊7 分享