mysql 索引整理記錄

2021-08-20 06:19:22 字數 2463 閱讀 8314

mysql 索引

使用原則:

我們應該可以知道,並不是每個字段度設定索引就好,也不是索引越多越好,而是需要自己合理的使用。

1、對經常更新的表就避免對其進行過多的索引,對經常用於查詢的字段應該建立索引,

2、資料量小的表最好不要使用索引,因為由於資料較少,可能查詢全部資料花費的時間比遍歷索引的時間還要短,索引就可能不會產生優化效果。

3、在一同值少的列上(欄位上)不要建立索引,比如在學生表的"性別"欄位上只有男,女兩個不同值。相反的,在乙個欄位上不同值較多可是建立索引

4、越小的資料型別通常更好:越小的資料型別通常在磁碟、記憶體和cpu快取中都需要更少的空間,處理起來更快。

5、簡單的資料型別更好:整型資料比起字元,處理開銷更小,因為字串的比較更複雜。在mysql中,應該用內建的日期和時間資料型別,而不是用字串來儲存時間;以及用整型資料型別儲存ip位址。

6、盡量避免null:應該指定列為not null,除非你想儲存null。在mysql中,含有空值的列很難進行查詢優化,因為它們使得索引、索引的統計資訊以及比較運算更加複雜。你應該用0、乙個特殊的值或者乙個空串代替空值。

在表中有where和join中出現的列需要建立索引,mysql只針對<,<=,=,>,>=,between,in以及like才會使用索引。

索引分為聚簇索引和非聚簇索引兩種,聚簇索引是按照資料存放的物理位置為順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對於單行的檢索很快。

mysql常見索引有:主鍵索引、唯一索引、普通索引、全文索引、組合索引

primary key(主鍵索引)  alter table `table_name` add primary key ( `col` ) 

unique(唯一索引)     alter table `table_name` add unique (`col`)

index(普通索引)     alter table `table_name` add index index_name (`col`)

fulltext(全文索引)      alter table `table_name` add fulltext ( `col` )

組合索引   alter table `table_name` add index index_name (`col1`, `col2`, `col3` ) 

澄清乙個概念:innodb中,在聚簇索引之上建立的索引稱之為輔助索引,輔助索引訪問資料總是需要二次查詢,非聚簇索引都是輔助索引,像復合索引、字首索引、唯一索引,輔助索引葉子節點儲存的不再是行的物理位置,而是主鍵值

mysql各種索引區別:

普通索引:最基本的索引,沒有任何限制

唯一索引:與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值。

主鍵索引:它 是一種特殊的唯一索引,不允許有空值。 

全文索引:僅可用於 myisam 表,針對較大的資料,生成全文索引很耗時好空間。

組合索引:為了更多的提高mysql效率可建立組合索引,遵循」最左字首「原則。建立復合索引時應該將最常用(頻率)作限制條件的列放在最左邊,依次遞減,組合索引最左字段用in是可以用到索引的,最好explain一下select。

mysql裡建立『聯合索引』的意義?

1、"乙個頂三個"。建了乙個(a,b,c)的復合索引,那麼實際等於建了(a),(a,b),(a,b,c)三個索引,因為每多乙個索引,都會增加寫操作的開銷和磁碟空間的開銷。對於大量資料的表,這可是不小的開銷!

2、覆蓋索引。同樣的有復合索引(a,b,c),如果有如下的sql: select a,b,c from table where a=1 and b = 1。那麼mysql可以直接通過遍歷索引取得資料,而無需回表,這減少了很多的隨機io操作。減少io操作,特別的隨機io其實是dba主要的優化策略。所以,在真正的實際應用中,覆蓋索引是主要的提公升效能的優化手段之一

3、索引列越多,通過索引篩選出的資料越少。有1000w條資料的表,有如下sql:select * from table where a = 1 and b =2 and c = 3,假設假設每個條件可以篩選出10%的資料,如果只有單值索引,那麼通過該索引能篩選出1000w*10%=100w 條資料,然後再回表從100w條資料中找到符合b=2 and c= 3的資料,然後再排序,再分頁;如果是復合索引,通過索引篩選出1000w *10% *10% *10%=1w,然後再排序、分頁,哪個更高效,一眼便知。

聯合索引又叫復合索引。對於復合索引:mysql從左到右的使用索引中的字段,多個單列索引與單個多列索引的查詢效果不同,因為執行查詢時,mysql只能使用乙個索引,會從多個索引中選擇乙個限制最為嚴格的索引。

注意:這裡的只能使用乙個索引,指的是只能使用一列索引,而不是只能使用乙個索引中的字段,但只能是最左側部分。例如索引是key index (a,b,c). 可以支援a | a,b| a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 .當最左側欄位是常量引用時,索引就十分有效。

參考:參考檔案: 

建立索引的原則

mysql索引優化

索引的原理

mysql 整理索引 Mysql索引整理

1 mysql基本單位是頁,大小為16kb 16384 1024 頁是為了增加查詢效率,減少io的互動 區域性性原理 2 頁與頁之間是雙向鍊錶,插入的時候會根據主鍵id進行排序 單葉資料結構.jpg 3 在頁上有乙個頁目錄,相當於把資料進行分組,存放的是當前組最小的主鍵id,指標並且指向對應的資料 ...

mysql 索引 磁碟整理 mysql 索引整理

1 只對 where 和 order by 子句中需要的列新增索引,多餘的索引智慧型導致不必要的硬碟空間愛你消耗。每次修改表資訊時會更新索引,因此有索引的表效能會相應降低。2 對於要使用索引的列要使用屬性 not null 這樣就永遠不會儲存 null 值。3 最好用唯一化索引,一般情況下,當查詢優...

mysql 整理 索引

一 在 command line client 中進行複製 在命令視窗ctrl c是不起作用的,只能靠右擊彈出的選單中的功能。可以這樣做 右擊 選擇 標記 然後用滑鼠拖動要複製的內容,然後在合適的位置右擊 選擇 複製 索引 一 索引的原理 對要查詢的字段建立索引其實就是把該字段按照一定的方式排序 建...