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

2021-07-12 04:22:19 字數 1576 閱讀 8693

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

如果查詢的列恰好是索引的一部分,

那麼查詢只需要在索引檔案上進行

,不需要回行到磁碟再找資料.

這種查詢速度非常快,

稱為」索引覆蓋」

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

索引和資料區別 

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

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

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

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

所以呢  如果建立兩條索引  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,...