索引覆蓋** 很重要的 乙個概念 就是在索引上查詢!!!
如果查詢的列恰好是索引的一部分,
那麼查詢只需要在索引檔案上進行
,不需要回行到磁碟再找資料.
這種查詢速度非常快,
稱為」索引覆蓋」
非聚促索引 索引檔案對應了資料要回行 浪費掉了時間
索引和資料區別
索引是高效組織起來的樹 , 節點 ,查詢樹葉 結構更優於資料
索引可以被匯入記憶體中進行查詢
索引本身資料結構簡單 再放入記憶體 很快很快
。。。。。。。。。結果一回行 就滿了。。。我擦。。。
所以呢 如果建立兩條索引 index( uid , aid)
如果在索引樹上已經覆蓋了你想要的資料 如 select uid from msg where aid = 1
索引已經覆蓋了想要查的 則直接在記憶體中的索引取出來 速度效率都非常快 自然不用回行查詢
最優索引:
查詢頻繁,區分度高 ,長度小
盡量覆蓋常用字段 , ------》索引覆蓋
左字首不易區分 逆轉url 把內容到過來 ; 左字首區分度大
偽雜湊 crc32() 函式 來唯一區分 crc32('');給urlcrc 建索引 而不是去給url 避免了索引
學會 explain 來檢視效果 ;
偽hash
索引效果
同時存 url_hash列
create table t10 (
id int primary key,
url char(60) not null default ''
insert into t10 values
(1,''),
(2,''),
(3,''),
(4,''),
(5,'');
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優化之覆蓋索引
1 當發起乙個被索引覆蓋的查詢時,在explain的extra列可以看到using index的資訊,此時就使用了覆蓋索引 mysql explain select store id,film id from inventory g 1.row id 1 select type table inve...
mysql 覆蓋索引和聯合索引
我們這裡建立乙個使用者表,表中有字段name,並且在name上有索引 1 create table t user 2 id bigint 20 not null auto increment 3 name varchar 255 not null,4 primary key id 5index in...
MySQL覆蓋索引呼叫 MySQL 覆蓋索引
什麼是覆蓋索引 建立乙個索引,該索引包含查詢中用到的所有字段,稱為 覆蓋索引 使用覆蓋索引,mysql 只需要通過索引就可以查詢和返回查詢所需要的資料,而不必在使用索引處理資料之後再進行回表操作。覆蓋索引可以一次性完成查詢工作,有效減少io,提高查詢效率。使用示例 查詢語句 select col2,...