mysql建索引原則及索引區別

2021-07-22 06:05:35 字數 1419 閱讀 5797

索引原則

1、最左字首匹配

mysql 會一直向右匹配直到遇到範圍查詢(<,>,between,like)就停止匹配。

如:a=1 and b=1 and c>3 and d=4 ,如果建立(a,b,c,d)順序的索引,d是使用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a b d 可以任意調整順序。

2、= 和 in 可以亂序。

比如:a=1 and b =2 and c=3,   建立(a,b,c)索引可以任意順序,mysql優化器會自動優化。

3、盡量選擇區分高度的列作為索引。

區分度的公式:count(distinct col)/count(*),表示欄位不重複比例,比例越大掃瞄記錄數越少,唯一鍵的區分度是1,而一些狀態、性別字段可能在大資料面前區分度就是0 。

一般需要join 的字段我們都要求是0.1 以上,即平均1條掃瞄10條記錄

4、索引列不能參與計算

索引使用

1、索引的列是出現在where 子句後面或連線子句中指定的列

2、使用唯一索引,索引的列基數越大越好。(不同的值)

3、使用短索引。如果對字串列進行索引,應該指定乙個長度,只要有可能就應該這樣做。例如有乙個varchar(200)列,如果在前10或20個字元多數值是唯一的,就不要對整列進行索引。對前10或20個字元進行索引能節省大量的索引空間,使查詢更快。較少的索引涉及的磁碟io較少,較短的值的比較速度更快。主要是:對於較短的鍵值,索引快取記憶體中的塊能容納更多的鍵值,因此,mysql也可以在記憶體中容納更多的值。這樣就增加了找到行而不用讀取索引中較多塊的可能性。

4、最左字首。建立n列索引時,實際建立了mysql可以利用的n個索引。多列索引可起幾個索引的作用,加為可利用索引中最左邊的列集來匹配行。這樣的列集稱為最左字首。

5、不要過度索引

6、對於innodb 儲存引擎的表,記錄缺省會執照一定的順序儲存,如果有明確的定義主鍵,則按照主鍵順序儲存。若沒有主鍵,有唯一索引,就按照唯一索引的順序儲存。如果沒有主鍵也沒有唯一索引,表中會自動生成乙個內部列,按照這個列的順序儲存。按照主鍵或者內部列進行的訪問是最快的。innodb 表的普通索引都會儲存主鍵的鍵值,所以主鍵要盡量的選擇較短的資料型別。

索引區別

btree 索引

>,<,>=,<=,between,!= ,  <> ,  like 'pattern'('pattern' 不以萬用字元開始),使用這些操作符時,都可以使用相關列上的索引

hash 索引

只用於= 或 <=> 操作符的等式比較

優化器不能使用hash 索引來加速order by 操作

mysql 不能確定在兩個值之間大約有多少行。如果將乙個myisam 表改為hash 索引memory 表,會影響一些查詢的執行效率

只能使用整個關鍵字來搜尋一行

MySQL建索引需要遵循哪些原則

1.選擇唯一性索引 唯一性索引的值是唯一的,可以更快速的通過該索引來確定某條記錄。例如,學生表中學號是具有唯一性的字段。為該字段建立唯一性索引可以很快的確定某個學生的資訊。如果使用姓名的話,可能存在同名現象,從而降低查詢速度。2.為經常需要排序 分組和聯合操作的字段建立索引 經常需要order by...

mysql 索引及區別

聚集索引和非聚集索引的區別 聚集索引和非聚集索引的根本區別是表記錄的排列順序和與索引的排列順序是否一致。聚集索引 聚集索引表記錄的排列順序和索引的排列順序一致,所以查詢效率快,只要找到第乙個索引值記錄,其餘就連續性的記錄在物理也一樣連續存放。聚集索引對應的缺點就是修改慢,因為為了保證表中記錄的物理和...

MySQL 索引介紹及索引的分類 索引原則

索引的使用 1.在建立表的時候給字段增加索引.2.建立表完畢後,增加索引.use school show index from student 顯示所有的索引資訊 增加乙個全文索引 索引名 列名 alter table student add fulltext index studentname s...