mysql 5 索引及優化

2021-10-07 04:17:15 字數 1695 閱讀 7017

索引幫助mysql高效獲取資料的資料結構,簡而言之,索引就是資料結構,是檔案

普通索引

索引只包含乙個單列,每個表可以有很多單列

復合索引

索引包含多個列

唯一索引

索引的值是唯一的,可以為null

聚簇索引

並不是一種單獨的索引型別,而是一種資料儲存結構.具體細節由儲存引擎決定,如innodb的聚簇索引其實就是在同一結構中儲存了b-tree索引和資料行

非聚簇索引

不是聚簇索引就是非聚簇索引

使用explain關鍵字模擬優化器執行sql優化,從而知道mysql是如何優化我們的sql語句,分析sql查詢和表結構的瓶頸.結構如下圖:

idselect_type

table

type

possible_key

keykey_len

refrows

extra

作用:select語句的序列號,表示查詢中執行select子句或操作表的順序

執行順序:

查詢的型別,用於區別普通查詢,聯合查詢,子查詢等複雜的查詢

顯示這一行資料是關於哪個表的

顯示的訪問型別,是重要的指標.結果值從好到壞的順序:

system>const>eq_ref>ref>range>index>all

表只有一行記錄(相當於系統表)

用於比較主鍵和唯一索引.因為只匹配一行資料,所以很快.如將主鍵至於where列表中.

唯一性索引掃瞄,表中只有一條資料匹配.與const的區別在於const的where語句中傳的是常量,eq_ref傳的是變數(多表聯合查詢)

非唯一性索引掃瞄,返回匹配某個單獨值的所有行.

本質上也屬於索引訪問,它返回匹配單獨值的所有行,然而,可能又很多符合條件的行,索引他屬於查詢與掃瞄的混合體

只檢索給定範圍的行,使用索引來選擇行.key中顯示使用了哪個索引.

一般是在條件語句**現了(between,<,>,in)等的查詢.

這種範圍掃瞄要比全表掃瞄要好,因為只需要開始於索引的某一點而不是掃瞄全部索引

覆蓋索引,在索引查詢資料,一般出現在select語句全部是索引的列

全表掃瞄,匹配符合條件的列

可能使用到的索引

實際使用到的索引

使用到的索引長度,設計時越短越好(節省空間),實際查詢時匹配的越長越好

顯示索引的那一列被使用,可能的話是乙個常量.那些列或常量用於查詢索引列上的值

根據表統計資訊和索引使用情況,大致估算出找到所需的列所需要掃瞄的行

包含不適合在其他列顯示但是非常重要的屬性

usingfilesort 說明沒有使用索引的排序

using temporary 使用了臨時表作為中間結果.常見於分組和排序

using index 是否使用了覆蓋索引

key_len最好和索引結構定義的一致

聯合索引中,查詢從索引的最左列開始並且不跳過索引的列

不做索引欄位上做任何操作(計算,函式,自動or收到型別轉換),導致索引失效,從而全表掃瞄

儲存引擎不能使用索引範圍條件右邊的列

盡量使用覆蓋所以(只訪問索引的查詢),避免select*

mysql中使用!=或<>會導致索引失效

以萬用字元(』%***』)左匹配查詢會導致索引失效(最左匹配原則)

or會導致range查詢,沒有ref查詢效率高

mysql5 1 優化 MySQL5 效能優化

效能優化 優化mysql資料庫是資料庫管理員和資料庫開發人員的必備技能。mysql優化,一方面是找出系統的瓶頸,提高mysql資料庫的整體效能 一方面需要合理的結構設計和引數調整,以提高使用者操作響應的速度 同時應該盡可能節省系統資源,以便系統可以提供更大負荷的服務。mysql資料庫優化是多方面的,...

mysql5無法注入 mysql5注入

對mysql5注入時,可以直接查詢information schema中的tables表,快速找到所需的表段。同時可以利用group concat函式,得到你想得到的東西,不用limit乙個乙個猜。前面先轉轉別人的東西 and 1 2 union select 1,2,group concat us...

mysql優化(5) 索引優化

建立合理地索引能夠提公升資料庫的查詢效率,但是如果建立的索引不合理,不僅會降低資料庫的插入 修改 刪除的效率,而且會降低資料庫的查詢效率。其中最主要的是組合索引的建立和優化。mysql允許在相同的列上建立多個索引,無論索引是否有實際的意義。且索引一旦被建立,就需要mysql單獨維護重複的索引,且my...