想要了解索引的優化方式,必須要對索引的底層原理有所了解
索引的用處
索引的分類
面試技術名詞
索引採用的資料結構
索引匹配方式
create table staffs(
id int primary key auto_increment,
name varchar(24) not null default 『』 comment 『姓名』,
age int not null default 0 comment 『年齡』,
pos varchar(20) not null default 『』 comment 『職位』,
add_time timestamp not null default current_timestamp comment 『入職時間』
) charset utf8 comment 『員工記錄表』;
-----------alter table staffs add index idx_nap(name, age, pos);
匹配最左字首
匹配列字首
匹配範圍值
精確匹配某一列並範圍匹配另外一列
只訪問索引的查詢
案例當需要儲存大量的url,並且根據url進行搜尋查詢,如果使用b+樹,儲存的內容就會很大
select id from url where url=""
也可以利用將url使用crc32做雜湊,可以使用以下查詢方式:
select id fom url where url="" and url_crc=crc32("")
此查詢效能較高原因是使用體積很小的索引來完成查詢缺點
非聚簇索引 優勢
案例演示
盡量使用主鍵查詢,而不是其他索引,因此主鍵查詢不會觸發回表查詢
使用字首索引
使用索引掃瞄來排序
union all,in,or都能夠使用索引,但是推薦使用in
範圍列可以用到索引
強制型別轉換會全表掃瞄
create table user(id int,name varchar(10),phone varchar(11));
alter table user add index idx_1(phone);
explain select * from user where phone=『13800001234』;
更新十分頻繁,資料區分度不高的字段上不宜建立索引
建立索引的列,不允許為null,可能會得到不符合預期的結果
當需要進行表連線的時候,最好不要超過三張表,因為需要join的字段,資料型別必須一致
能使用limit的時候盡量使用limit
單錶索引建議控制在5個以內
單索引欄位數不允許超過5個(組合索引)
建立索引的時候應該避免以下錯誤概念
xmind - trial version
Mysql 索引知識點
概述 之前寫過一篇mysql b 樹學習,簡單的介紹了b 數以及mysql使用b 樹的原因,有了這些基礎知識點,對mysql索引的型別以及索引使用的一些技巧,就比較容易理解了。覆蓋索引 建立了乙個輔助索引,如果能直接從這個輔助索引檔案中獲取到資料,而無需去訪問聚集索引 自增主鍵索引 檔案的話,那麼這...
mysql優化相關知識點
所有字段建議設定為非null,從效率和索引上來說,null佔空間並且不走索引,所以請將所有字段設定為非null 有些欄位在程式中設定當值為某個具體數的時候表示為空,但這個數字在程式中又是根據不定值得來的,有可能真正有意義的數字是這個為空的數字,建議將為空的表示做成不在程式範圍的數字 有些表有建立時間...
索引知識點
索引 概念 對資料表中一列或多列的值進行排序後的一種結構,其作用就是提高表中資料的查詢速度。1.普通索引 由key或index定義的索引,是基本索引型別,可以建立任何資料型別中,其值是否唯一和非空由字段本身的約束條件所決定。2.唯一性索引 由unique定義的索引,該索引所在欄位的值必須是唯一的。3...