首頁 > 資料庫 > mysql教程 > mysql 最佳化(4)索引覆蓋和最優索引

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

黄舟
發布: 2016-12-29 16:09:12
原創
1320 人瀏覽過

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

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

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

非聚促索引索引檔案對應了資料要回行浪費掉了時間 

索引和資料差異 

索引是高效組織起來的樹, 節點,查找樹葉結構較優於資料

索引可以匯入記憶體中進行查詢

索引本身資料結構簡單再放入記憶體很快很快 

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

所以呢如果建立兩個索引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;
登入後複製

在sqlc上儲存時, crcurl== crccurl
在sqlc的結果是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)!



來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板