mysql 優化(4)索引覆蓋和最優索引

索引覆蓋** 很重要的 一個概念 就是在索引上查找!!!

如果查詢的列恰好是索引的一部分,那么查詢只需要在索引文件上進行,不需要回行到磁盤再找數據.

這種查詢速度非常快,稱為”索引覆蓋”

非聚促索引 索引文件對應了數據要回行 浪費掉了時間?

索引和數據區別?

索引是高效組織起來的樹 , 節點 ,查找樹葉 結構更優于數據

索引可以被導入內存中進行查詢?

索引本身數據結構簡單 再放入內存 很快很快?

。。。。。。。。。結果一回行 就滿了。。。我擦。。。

所以呢 如果建立兩條索引 index( uid , aid)?

如果在索引樹上已經覆蓋了你想要的數據 如 select uid from msg where aid = 1?

索引已經覆蓋了想要查的 則直接在內存中的索引取出來 速度效率都非常快 自然不用回行查找

最優索引:

查詢頻繁,區分度高 ,長度小

盡量覆蓋常用字段 , ——》索引覆蓋

左前綴不易區分 逆轉url 把內容到過來 ; 左前綴區分度大?

偽哈希 crc32() 函數 來唯一區分 crc32(’http://wwww.baidu.com’);給urlcrc 建索引 而不是去給url 避免了索引

學會 explain 來查看效果 ;

偽hash索引效果

同時存 url_hash列

create?table?t10?(  id?int?primary?key,  url?char(60)?not?null?default?''  );
insert?into?t10?values?  (1,'http://www.baidu.com'),  (2,'http://www.sina.com'),  (3,'http://www.sohu.com.cn'),  (4,'http://www.onlinedown.net'),  (5,'http://www.gov.cn');  alter?table?t10?add?urlcrc?int?unsigned?not?null;

在sql存儲時, crcurl== crc32(url),

因為crc的結果是32位int無符號數,因此當數據超過40億,也會有重復,但這是值得的.

(索引長度為int4個字節)

多咧索引的設計

但從 商城的實際業務業務看, 顧客一般先選大分類->小分類->品牌,

最終選擇 (1)index(cat_id,brand_id), + index(cat_id,shop_price)來建立索引

甚至可以再加 (3)index(cat_id,brand_id,shop_price),3個冗余索引 冗余字段 。。。

但(3)中的前2列和(1)中的前2列一樣,再去掉(1)

index(cat_id,price) 和 index(cat_id,brand_id,shop_price); 也就是可以冗余 但是不能能重復 左前綴原則

?以上就是mysql 優化(4)索引覆蓋和最優索引的內容,更多相關內容請關注PHP中文網(www.php.cn)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享