索引是建的越多越好嗎

明顯不是,有以下幾點:
1.數據量小的表不需要建立索引,建立會增加額外的索引開銷
2.不經常引用的列不要建立索引,因爲不常用,即使建立了索引也沒有多大意義。對經常用於查詢的字段應該創建索引。
3.經常頻繁更新的列不要建立索引,因爲肯定會影響插入或更新的效率
4.數據重複且分佈平均的字段,因此他建立索引就沒有太大的效果(例如性別字段,是否上架等等,不適合建立索引)
5.數據變更需要維護索引,意味着索引越多維護成本越高。當對錶中的數據進行增加、刪除、修改時,索引也需要動態的維護,降低了數據的維護速度。
6.更多的索引也需要更多的存儲空間,一個表中很夠創建多個索引,這些索引度會被存放到一個索引文件中(專門存放索引的地方)。

順便說一下索引的相關知識:
索引用於快速找出在某個列中有一特定值的行,不使用索引,MySQL必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢數據所花費的時間就越多,所以索引還是很有用的,其中MySQL中的索引的存儲類型有兩種:BTREE、HASH,平時我們經常見到的基本都是b+樹。
MyISAM(非聚簇索引)和InnoDB(聚簇索引)存儲引擎:只支持BTREE索引, 也就是說默認使用BTREE,這也是我們經常見到的,不能夠更換MEMORY/HEAP存儲引擎:支持HASH和BTREE索引。(上面的聚簇索引和非聚簇索引,可以這麼區分,聚簇索引的葉子節點就是數據節點,而非聚簇索引的葉子節點仍然是索引節點,只不過有指向對應數據塊的指針。)

索引我們分爲四類來講 單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引。這裏我們只說說第一個和第二個。
單列索引:一個索引只包含單個列,但一個表中可以有多個單列索引。 這裏不要搞混淆了。
普通索引:MySQL中基本索引類型,沒有什麼限制,允許在定義索引的列中插入重複值和空值,純粹爲了查詢數據更快一點。
唯一索引:索引列中的值必須是唯一的,但是允許爲空值。
主鍵索引:是一種特殊的唯一索引,不允許有空值。
組合索引:(也叫聯合索引(多列聯合))
在表中的多個字段組合上創建的索引,只有在查詢條件中使用了這些字段的左邊字段時,索引纔會被使用,使用組合索引時遵循最左前綴集合。例子如下:
聯合索引 (a,b,c) 實際建立了 (a)、(a,b)、(a,b,c) 三個索引.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章