mysql 索引學習的一些總結

2022-08-15 01:57:13 字數 1505 閱讀 5275

一、使用索引的注意事項

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,常理來說這...