**:
優點有了索引.對於記錄數量很多的表,可以提高查詢速度.
缺點索引是占用空間的.
索引會影響update insert delete速度
alert!!!
1索引要建立在where和join用到的字段上.
2以下操作符號可以應用索引
:<,<=,=,>,>=,between,in,like不以%_開頭
以下需要注意不使用索引
<>, not in, like %_開頭
<> 可以用 a>1 or a<3 代替,not in 可以用not exists代替
3在使用max() min()時最好加上索引.
4單索引要建立在確實需要的地方.
多列索引 有最佳左字首特性 所以盡量左邊的字段是最常用的.
6索引不會包括有null值,就是有null,索引就失效
7使用短索引,乙個欄位字太多,可以建立部分索引,只取前十個字.節約空間.
8不要在列上運算.例如:where md5("password") = "myz"
9explain select * from myz 來測試一下語句的效率...
輸入 explain select * from customer; 後,出現一張表,個行的意思如下:
table-顯示此行資料屬於哪張表;type-重要的一列,顯示使用了何種連線,從好到差依次為const、eq_ref、ref、 range、index、all;possible_keys-可以應用在這張表中的索引,如果為null,則表示沒有可用索引;key-實際使用的索 引,如為null,表示沒有用到索引;key_len-索引的長度,在不損失精確度的情況下,越短越好;ref-顯示索引的哪一列被使用了,如果可能的 話,是個常數;rows-返回請求資料的行數;extra-關於mysql如何解析查詢的額外資訊,下面會詳細說明。
type的描述:system-表只有一行,這是const連線型別的特例;const-表中乙個記錄的最大值能夠匹配這個查詢(索引可以是主 鍵或唯一索引)。因為只有一行,這個值實際就是常數,因為mysql先讀這個值,再把它當作常數對待;eq_ref-從前面的表中,對每乙個記錄的聯合都 從表中讀取乙個記錄。在查詢使用索引為主鍵或唯一索引的全部時使用;ref-只有使用了不是主鍵或唯一索引的部分時發生。對於前面表的每一行聯合,全部記 錄都將從表中讀出,這個連線型別嚴重依賴索引匹配記錄的多少-越少越好;range-使用索引返回乙個範圍中的行,比如使用》或《查詢時發 生;index-這個連線型別對前面的表中的每乙個記錄聯合進行完全掃瞄(比all好,因為索引一般小於表資料);all-這個連線型別多前面的表中的每 乙個記錄聯合進行完全掃瞄,這個比較糟糕,應該盡量避免。
extra行的描述:distinct-mysql找到了域行聯合匹配的行,就不再搜尋了;
not exists-mysql優化了left join,一旦找到了匹配left join的行,就不再搜尋了;
range checked for each-沒找到理想的索引,一次對於從前面表中來的每乙個行組合;
record(index map: #)-檢查使用哪個索引,並用它從表中返回行,這是使用索引最慢的一種;
using filesort-看到這個就需要優化查詢了,mysql需要額外的步驟來發現如何對返回的行排序。他根據連線型別以及儲存排序鍵值和匹配條件的全部行的行指標來排序全部行。
using index-列資料是從單單使用了索引中的資訊而沒有讀取實際行的表返回的,這發生在對錶的全部的請求列都是同乙個索引時;
using temporary-看到這個就需要優化查詢了,mysql需要建立乙個臨時表來查詢儲存結果,這通常發生在多不同的列表進行order by時,而不是group by;
where used-使用了where從句來限制哪些行將與下一張表匹配或是返回給使用者。如不想返回表中用的全部行,並連線型別是all或index,這就會發生,也可能是查詢有問題。
10檢視索引資訊
show index from tablename;
**:
優點有了索引.對於記錄數量很多的表,可以提高查詢速度.
缺點索引是占用空間的.
索引會影響update insert delete速度
alert!!!
1索引要建立在where和join用到的字段上.
2以下操作符號可以應用索引
:<,<=,=,>,>=,between,in,like不以%_開頭
以下需要注意不使用索引
<>, not in, like %_開頭
<> 可以用 a>1 or a<3 代替,not in 可以用not exists代替
3在使用max() min()時最好加上索引.
4單索引要建立在確實需要的地方.
多列索引 有最佳左字首特性 所以盡量左邊的字段是最常用的.
6索引不會包括有null值,就是有null,索引就失效
7使用短索引,乙個欄位字太多,可以建立部分索引,只取前十個字.節約空間.
8不要在列上運算.例如:where md5("password") = "myz"
9explain select * from myz 來測試一下語句的效率...
輸入 explain select * from customer; 後,出現一張表,個行的意思如下:
table-顯示此行資料屬於哪張表;type-重要的一列,顯示使用了何種連線,從好到差依次為const、eq_ref、ref、 range、index、all;possible_keys-可以應用在這張表中的索引,如果為null,則表示沒有可用索引;key-實際使用的索 引,如為null,表示沒有用到索引;key_len-索引的長度,在不損失精確度的情況下,越短越好;ref-顯示索引的哪一列被使用了,如果可能的 話,是個常數;rows-返回請求資料的行數;extra-關於mysql如何解析查詢的額外資訊,下面會詳細說明。
type的描述:system-表只有一行,這是const連線型別的特例;const-表中乙個記錄的最大值能夠匹配這個查詢(索引可以是主 鍵或唯一索引)。因為只有一行,這個值實際就是常數,因為mysql先讀這個值,再把它當作常數對待;eq_ref-從前面的表中,對每乙個記錄的聯合都 從表中讀取乙個記錄。在查詢使用索引為主鍵或唯一索引的全部時使用;ref-只有使用了不是主鍵或唯一索引的部分時發生。對於前面表的每一行聯合,全部記 錄都將從表中讀出,這個連線型別嚴重依賴索引匹配記錄的多少-越少越好;range-使用索引返回乙個範圍中的行,比如使用》或《查詢時發 生;index-這個連線型別對前面的表中的每乙個記錄聯合進行完全掃瞄(比all好,因為索引一般小於表資料);all-這個連線型別多前面的表中的每 乙個記錄聯合進行完全掃瞄,這個比較糟糕,應該盡量避免。
extra行的描述:distinct-mysql找到了域行聯合匹配的行,就不再搜尋了;
not exists-mysql優化了left join,一旦找到了匹配left join的行,就不再搜尋了;
range checked for each-沒找到理想的索引,一次對於從前面表中來的每乙個行組合;
record(index map: #)-檢查使用哪個索引,並用它從表中返回行,這是使用索引最慢的一種;
using filesort-看到這個就需要優化查詢了,mysql需要額外的步驟來發現如何對返回的行排序。他根據連線型別以及儲存排序鍵值和匹配條件的全部行的行指標來排序全部行。
using index-列資料是從單單使用了索引中的資訊而沒有讀取實際行的表返回的,這發生在對錶的全部的請求列都是同乙個索引時;
using temporary-看到這個就需要優化查詢了,mysql需要建立乙個臨時表來查詢儲存結果,這通常發生在多不同的列表進行order by時,而不是group by;
where used-使用了where從句來限制哪些行將與下一張表匹配或是返回給使用者。如不想返回表中用的全部行,並連線型別是all或index,這就會發生,也可能是查詢有問題。
10檢視索引資訊
show index from tablename;
Mysql索引優缺點
建立索引可以大大提高系統的效能。第一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。第二,可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。第三,可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。第四,在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中...
mysql 索引優缺點
1 聯合索引 適用於最左匹配原則 例如 設定乙個聯合索引 三個字段 從最左邊開始匹配,如果遇到沒有使用索引,則這個索引後的設定的索引也將會失效。遇到範圍匹配時,索引也會失效。2 不使用索引情況 當數值是字串型別,條件沒有加引號查詢時則不會使用索引。模糊匹配,百分號 在前面 也不會使用索引如 sele...
MySql索引的優缺點
優點 有了索引.對於記錄數量很多的表,可以提高查詢速度.缺點 索引是占用空間的.索引會影響update insert delete速度 alert 1 索引要建立在where和join用到的字段上.2 以下操作符號可以應用索引 between,in,like不以 開頭 以下需要注意不使用索引 not...