2 mysql優化之使用索引優化查詢

2021-07-02 23:17:45 字數 4098 閱讀 1912

索引是資料庫優化中最常用的也是最重要的手段之一。該篇看看索引的分類,使用場景,不能使用的場景等。

索引是在mysql儲存引擎中實現的,而不是在伺服器層實現的。索引每種儲存引擎的索引不一定相同。mysql支援4種索引:

衍生索引:主鍵,唯一索引,組合索引,字首索引等。hash索引適合key-value查詢(等值查詢),不適合範圍查詢。

索引myisam引擎

innodb引擎

memory引擎

b-tree索引

支援支援

支援full-text索引支援-

-hash索引--

支援r-tree索引支援-

-1.匹配全值(match the full value)

對索引中所有列都指定具體值,即對索引中的所有列都有等值匹配的條件。

#設定組合索引(rental_date,inventory_id,customer_id)為唯一索引。

2.匹配值的範圍查詢(match a range of values)對索引值進行範圍查詢。

#設定索引idx_fk_customer_id(customer_id)

3.匹配最左字首(match a leftmost prefix)僅僅使用索引中的最左邊列進行查詢。比如組合索引(col1,col2,col3)能夠被col1,col1+col2,col1+col2+col3的等值查詢利用到的。

#建立索引idx_payment_date(payment_date,amount,last_update);

從結果可以看出利用了索引,但又row為182行,所有只使用了部分索引。

從結果看出,這次查詢沒有利用索引,進行了全表查詢。

4.僅對索引查詢進行查詢(index only query)

當查詢列都在索引欄位中。即select中的列都在索引中。

extra部分using index,說明不需要通過索引回表,using index就是平時說的覆蓋索引掃瞄(即找到索引,就找到了要查詢的結果,不用再回表查詢了)。

5.匹配列字首(match a column prefix)

僅僅使用索引的第一列,並且只包含索引第1列的開頭部分進行查詢。

#建立索引idx_title_desc_part(title(10),description(20));

6.索引部分等值匹配,部分範圍匹配

type=ref,說明使用了索引。

7.列名是索引,column_name is null,使用索引

1.以%開頭的like查詢

explain select * from actor where last_name like

'%ni%';

#優化

2.資料型別出現隱式轉化,不會使用索引

explain select * from actor where last_name=1;

#使用索引

3.組合索引,不滿足最左原則,不使用符合索引

explain select * from payment where amount=3.98

and last_update='2006-02-15 22:12:32';

4.估計使用索引比全表掃瞄還慢,則不要使用索引如查詢以「s」開頭的標題的電影,返回記錄比例比較大,mysql預估索引掃瞄還不如全表掃瞄。

explain select * from film_text where title like

's%';

5.用or分割條件,若or前後只要有乙個列沒有索引,就都不會用索引

explain select * from payment where customer_id=203

or amount=3.96;

效能優化之mysql索引優化

sql及索引優化 如何通過慢查詢日誌發現有問題的sql?查詢次數多且每次查詢占用時間長的sql 通常為pt query digest分析的前幾個查詢 io大的sql 注意pt query digest分析中的rows examine項 未命中索引的sql 注意pt query digest分析中ro...

mysql 索引 二 2 MySQL索引

一 索引介紹 索引是一種資料結構,用於幫助我們在大量資料中快速定位到我們想要查詢的資料。索引在mysql中也叫做 鍵 是儲存引擎用於快速找到記錄的一種資料結構。索引對於良好的效能非常關鍵,尤其是當表中的資料量越來越大時,索引對於效能的影響愈發重要。索引優化應該是對查詢效能優化最有效的手段了。索引能夠...

MySQL優化 之 索引

四種索引 主鍵索引,唯一索引,普通索引,全文索引 對查詢語句會提高效率 對增刪改語句會降低效率,因為還要對索引進行增刪改!建立索引會佔磁碟空間 對頻繁查詢的字段應建立索引,對頻繁更新的字段不適合建立索引 1 新增 1.1 主鍵索引新增 1.當一張表,把某個列設為主鍵的時候,則該列就是主鍵索引 cre...