mysql 中索引的問題

2021-10-02 22:07:51 字數 1764 閱讀 9251

1、mysql使用索引口訣(demo示例)

全值匹配我最愛,最左字首要遵守;

帶頭大哥不能死,中間兄弟不能斷;

索引列上少計算,範圍之後全失效;

like百分寫最後,覆蓋索引不寫星;

join連線型別同,order條件非表示式;

不等空值or和'0/1',索引失效要少用。

2、可以使用mysql的explain來檢查自己的sql語句是否使用了索引

explain用法和結果的含義如下:

1、全表掃瞄沒有走索引

explain extended select * from pay_refund_detail

2、走索引

3、解釋一下字段意思

idselect識別符。這是select的查詢序列號

select_type

select型別,可以為以下任何一種:

table

輸出的行所引用的表

type

聯接型別。下面給出各種聯接型別,按照從最佳型別到最壞型別進行排序:

possible_keys

指出mysql能使用哪個索引在該表中找到行

key顯示mysql實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是null。

key_len

顯示mysql決定使用的鍵長度。如果鍵是null,則長度為null。

ref顯示使用哪個列或常數與key一起從表中選擇行。

rows

顯示mysql認為它執行查詢時必須檢查的行數。多行之間的資料相乘可以估算要處理的行數。

filtered

顯示了通過條件過濾出的行數的百分比估計值。

extra

該列包含mysql解決查詢的詳細資訊

not exists:mysql能夠對查詢進行left join優化,發現1個匹配left join標準的行後,不再為前面的的行組合在該錶內檢查更多的行。

range checked for each record (index map: #):mysql沒有發現好的可以使用的索引,但發現如果來自前面的表的列值已知,可能部分索引可以使用。

using filesort:mysql需要額外的一次傳遞,以找出如何按排序順序檢索行。

using index:從只使用索引樹中的資訊而不需要進一步搜尋讀取實際的行來檢索表中的列資訊。

using temporary:為了解決查詢,mysql需要建立乙個臨時表來容納結果。

using where:where 子句用於限制哪乙個行匹配下乙個表或傳送到客戶。

using sort_union(...), using union(...), using intersect(...):這些函式說明如何為index_merge聯接型別合併索引掃瞄。

using index for group-by:類似於訪問表的using index方式,using index for group-by表示mysql發現了乙個索引,可以用來查 詢group by或distinct查詢的所有列,而不要額外搜尋硬碟訪問實際的表。

Mysql中的索引問題

提高查詢的效率,相當於在字典中建立的字母表或者偏旁部首表,這樣查詢當然比一行一行查詢要快的多 每個儲存引擎可以建立索引的長度是不一樣的,但每個表至少支援16個索引,總的索引長度至少為256個位元組。大多數儲存引擎有更高的限制。create index index name using index t...

Mysql 中建立索引和索引的使用問題

在資料庫中合理的使用索引是提公升mysql資料庫的一種高效和快捷的方式,但是在索引的使用上在我的使用中發現有很多坑,因為自己之前沒有認識到,所以來總結一下 索引是一種特殊的檔案,其中包含著對資料表中的所有記錄的引用指標 欄位中儲存的內容重複性不能過高,比如性別,顏色等這些可區分性很低的字段 欄位會經...

MySQL索引,MySQL中索引的限制?

mysql中索引的限制 1 myisam儲存引擎引鍵的長度綜合不能超過1000位元組 2 blob和text型別的列只能建立字首索引 3 mysql目前不支援函式索引 4 使用!或者 的時候mysql不能使用索引 5 過濾字段使用了函式運算的時候如 abs key sum key 的時候mysql無...