一、使用索引的注意事項
1、索引不會包含有null值的列 (資料庫設計時不要讓字段的預設值為null )。
2、使用短索引:對串列進行索引,如果可能應該指定乙個字首長度,前10個或20個字元內 ;使用短索引可以大量節省磁碟空間,也有可能會使查詢更快;較小的索引涉及的磁碟i/o較少,較短的值比較起來更快;對於較短的鍵值,索引快取記憶體中塊能容納更多的鍵值,因此mysql也可以記憶體中容納更多的值。這增加了為了讀到行而不用讀取索引中較多塊的可能性。
3、 索引列排序 : mysql查詢只使用乙個索引因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列建立復合索引。
4、利用最左字首:在建立乙個n列索引時,實際是建立了mysql可利用的n個索引,多列索引可起幾個索引的作用,因為可利用索引最左邊的列集來匹配。
假設現在我們有乙個firstname、lastname、age列上的多列索引,我們稱這個索引為fname_lname_age。當搜尋條件是以下各種列的組合時,mysql將使用fname_lname_age索引:
firstname,lastname,age
firstname,lastname
firstname
5、不要過度索引:過度索引會占用過多的磁碟空間,並降低寫操作效能。在修改表的內容時,必須對索引進行更新,有時有可能需要進行重構,因此,過多的索引,更新所花的時間越長。索引太多也可能會導致mysql找不到所要使用的最好索引。
6、考慮在列上進行比較的型別:索引可用於「<","<=","=",">",">="">"和between運算,在模試裡有乙個直接量字首時,也可用行like運算。如果只將某列用於其他運算時(如strcmp()),對其進行索引沒有價值。
7、 like語句操作 : like 「%aaa%」 不會使用索引而like 「aaa%」可以使用索引。
不要在列上進行運算 select * from users where year(adddate)<2007; 將在每個行上進行運算,這將導致索引失效而進行全表掃瞄 可以改寫為: select * from users where adddate<『2007-01-01』。
不使用not in和<>操作。
8、 使你的資料盡可能小:
盡可能地使用最有效(最小)的資料型別。mysql有很多節省磁碟空間和記憶體的專業化型別。
盡可能使用較小的整數型別使表更小。例如,mediumint經常比int好一些,因為mediumint列使用的空間要少25%。
如果可能,宣告列為not null。它使任何事情更快而且每列可以節省一位。注意如果在應用程式中確實需要null,應該毫無疑問使用它,只是避免 預設地在所有列上有它。
對於myisam表,如果沒有任何變長列(varchar、text或blob列),使用固定尺寸的記錄格式。這比較快但是不幸地可能會浪費一些空間。即使你已經用create選項讓 varchar列row_format=fixed,也可以提示想使用固定長度的行。
mysql索引的一些總結
執行成本 執行時間 1.io 成本 即從磁碟把資料載入到記憶體的成本,預設情況下,讀取資料頁的 io 成本是 1,mysql 是以頁的形式讀取資料的,即當用到某個資料時,並不會只讀取這個資料,而會把這個資料相鄰的資料也一起讀到記憶體中,這就是有名的程式區域性性原理,所以 mysql 每次會讀取一整頁...
學習MYSQL索引後的一些思考
create index方式,用於建立表的時候 普通的索引的建立 create index 自定義 索引名 on 資料表 字段 復合索引的建立 create index 自定義 索引名 on 資料表 字段,欄位.alter table方式,用於建表完成後新增索引 普通索引 alter table 表...
mysql索引技巧 MySql 索引的一些技巧
一 多表子從查詢 多表查詢時,子查詢可能會出現觸發不了索引的情況 select from test 1 where id in select id from test publish where id in 38,69 上面語句,test 1和test public都where了主鍵id,常理來說這...