關於mysql建立索引需要注意的幾點事項

時間 2023-03-17 12:10:05

1樓:匿名使用者

1.索引不儲存null值。

更準確的說,單列索引不儲存null值,復合索引不儲存全為null的值。索引不能儲存null,所以對這列採用is null條件時,因為索引上根本沒null值,不能利用到索引,只能全表掃瞄。

為什麼索引列不能存null值?

將索引列值進行建樹,其中必然涉及到諸多的比較操作。null值的特殊性就在於參與的運算大多取值為null。這樣的話,null值實際上是不能參與進建索引的過程。

也就是說,null值不會像其他取值一樣出現在索引樹的葉子節點上。

2.不適合鍵值較少的列(重複資料較多的列)。

假如索引列type有5個鍵值,如果有1萬條資料,那麼 where type = 1將訪問表中的2000個資料塊。

再加上訪問索引塊,一共要訪問大於200個的資料塊。

如果全表掃瞄,假設10條資料乙個資料塊,那麼只需訪問1000個資料塊,既然全表掃瞄訪問的資料塊少一些,肯定就不會利用索引了。

3.前導模糊查詢不能利用索引(like '%xx'或者like '%xx%')

假如有這樣一列code的值為'aaa','aab','baa','bab' ,如果where code like '%ab'條件,由於前面是模糊的,所以不能利用索引的順序,必須乙個個去找,看是否滿足條件。這樣會導致全索引掃瞄或者全表掃瞄。如果是這樣的條件where code like 'a % 就可以查詢code中a開頭的code的位置,當碰到b開頭的資料時,就可以停止查詢了,因為後面的資料一定不滿足要求。

這樣就可以利用索引了。

主要提供2種方式的索引:b-tree索引,hash索引。

b樹索引具有範圍查詢和字首查詢的能力,對於有n節點的b樹,檢索一條記錄的複雜度為o(logn)。相當於二分查詢。

雜湊索引只能做等於查詢,但是無論多大的hash表,查詢複雜度都是o(1)。

顯然,如果值的差異性大,並且以等值查詢(=、in)為主,hash索引是更高效的選擇,它有o(1)的查詢複雜度。

如果值的差異性相對較差,並且以範圍查詢為主,b樹是更好的選擇,它支援範圍查詢。

2樓:騰訊電腦管家

mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index (a,b,c). 可以支援a | a,b| a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 .

當最左側欄位是常量引用時,索引就十分有效。

mysql建立索引的原則

mysql索引有什麼用?

3樓:慎素琴母琴

先正面你的問題。

資料是否重複不是建立索引的重要依據,甚至都不是依據。

只要不完全重複(所有元組的該元素都一樣),那麼建立索引就是有意義的。

即使當前資料完全重複,也不是不能建立索引,這種情況有點複雜,不細說了。

對於你後面的疑問,可以給你乙個如何建立索引的忠告,「如何查就如何建」。

索引的建立,唯一的原因就是為了查詢(廣義的查詢),實際上建立索引會使得資料儲存所佔空間變大,有時索引所佔的空間會查過資料本身的空間。索引的建立也會使得資料插入時變慢,特殊情況下,慢的難以忍受,所以dba的重要工作之一,就是檢查索引層級並優化。

索引建立的唯一好處,就是按照索引查詢時,變快了。type,status這2個字段是否適合建立索引,就要看你是否要按照這2個字段進行檢索。而檢索的順序決定了如何建立索引。

對於索引型別和索引方式,我建議就。

normal

和。btree

就適用於大多數情況。若你參與的是乙個大資料處理專案,對資料儲存和檢索有特別要求,那麼需要分析多個層面,比如資料吞吐量、資料的方差、平均差等等很多引數才考慮是否用聚集索引等(mysql好像還沒聚集索引),至於是否是唯一索引,我建議不使用,即使能判定資料是唯一的也不要用,全文索引也沒有必要。

mysql索引

4樓:陽光愛聊教育

在mysql中,索引是一種特殊的資料庫結構,由資料表中的一列或多列組合而成,可以用來快速查詢資料表中有某一特定值的記錄。

通過索引,查詢資料時不用讀完記錄的所有資訊,而只是查詢索引列即可。

通過索引,查詢資料時不用讀完記錄的所有資訊,而只是查詢索引列。否則,資料庫系統將讀取每條記錄的所有資訊進行匹配。

可以把索引比作新華字典的音序表。例如,要查「庫」字,如果不使用音序,就需要從字典的 400 頁中逐頁來找。但是,如果提取拼音出來,構成音序表,就只需要從 10 多頁的音序表中直接查詢。

這樣就可以大大節省時間。

因此,使用索引可以很大程度上提高資料庫的查詢速度,還有效的提高了資料庫系統的效能。

索引的優缺點。

索引有其明顯的優勢,也有其不可避免的缺點。

優點。索引的優點如下:

1、通過建立唯一索引可以保證資料庫表中每一行資料的唯一性。

2、可以給所有的 mysql 列型別設定索引。

3、可以大大加快資料的查詢速度,這是使用索引最主要的原因。

4、在實現資料的參考完整性方面可以加速表與表之間的連線。

5、在使用分組和排序子句進行資料查詢時也可以顯著減少查詢中分組和排序的時間。

缺點。增加索引也有許多不利的方面,主要如下:

1、建立和維護索引組要耗費時間,並且隨著資料量的增加所耗費的時間也會增加。

2、索引需要佔磁碟空間,除了資料表佔資料空間以外,每乙個索引還要佔一定的物理空間。如果有大量的索引,索引檔案可能比資料檔案更快達到最大檔案尺寸。

3、當對表中的資料進行增加、刪除和修改的時候,索引也要動態維護,這樣就降低了資料的維護速度。

使用索引時,需要綜合考慮索引的優點和缺點。

mysql之普通索引和唯一索引

mysql索引建立索引(a,b,c 書上說a,b,c a,b a這三種情況才使用索引

組合索引 有 最左字首 原則。簡單的理解就是只從最左面的開始組合。並不是只要包含這三列的查詢都會用到該組合索引 幻讀 書上說的也不是一定對的 針對a,b,c 這三個欄位的組合索引 書上說 根據最左字首原則 只有a a,b a,b,c 才能使用到索引 後來根據我親自測試 得出 a,c 也是可以使用在這...

MySql資料庫中存放使用者密碼需要注意什麼

漫步匆匆 密碼加密,少用password,acount等做表欄位 mysql資料庫裡面的資料中的密碼加密了,怎麼解密 我使用mysql資料庫來儲存資料,需要對使用者的密碼進行加密後儲存到資料庫中, select md5 111111 如果你們msql的md5函式的話,加密後固定是32位的。 普通md...

關於敏感肌需要注意什麼,敏感肌需要注意什麼?

敏感肌需要注意遠離過敏源。如果不知道過敏源可以去醫院做個檢測。其次不要自己亂用藥,也別使用過多的化妝品。敏感肌需要使用無刺激配方的護膚品。最好是找到一款適合自己的就一直使用 不要頻繁更換。春季出門時佩戴口罩,因為春節是過敏多發季。飲食方面也要注意,少吃容易誘發過敏的食物。避免去一些容易讓 敏感的場所...