索引幫助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...