索引是建的越多越好吗?
索引是建的越多越好嗎?
明顯不是,有以下幾點:
- 數(shù)據(jù)量小的表不需要建立索引,建立會增加額外的索引開銷
- 不經(jīng)常引用的列不要建立索引,因為不常用,即使建立了索引也沒有多大意義。對經(jīng)常用于查詢的字段應(yīng)該創(chuàng)建索引。
- 經(jīng)常頻繁更新的列不要建立索引,因為肯定會影響插入或更新的效率
- 數(shù)據(jù)重復(fù)且分布平均的字段,因此他建立索引就沒有太大的效果(例如性別字段,是否上架等等,不適合建立索引)
- 數(shù)據(jù)變更需要維護索引,意味著索引越多維護成本越高。當對表中的數(shù)據(jù)進行增加、刪除、修改時,索引也需要動態(tài)的維護,降低了數(shù)據(jù)的維護速度。
- 更多的索引也需要更多的存儲空間,一個表中很夠創(chuàng)建多個索引,這些索引度會被存放到一個索引文件中(專門存放索引的地方)。
順便說一下索引的相關(guān)知識:
索引用于快速找出在某個列中有一特定值的行,不使用索引,MySQL必須從第一條記錄開始讀完整個表,直到找出相關(guān)的行,表越大,查詢數(shù)據(jù)所花費的時間就越多,所以索引還是很有用的,其中MySQL中的索引的存儲類型有兩種:BTREE、HASH,平時我們經(jīng)常見到的基本都是b+樹。
MyISAM(非聚簇索引)和InnoDB(聚簇索引)存儲引擎:只支持BTREE索引, 也就是說默認使用BTREE,這也是我們經(jīng)常見到的,不能夠更換MEMORY/HEAP存儲引擎:支持HASH和BTREE索引。(上面的聚簇索引和非聚簇索引,可以這么區(qū)分,聚簇索引的葉子節(jié)點就是數(shù)據(jù)節(jié)點,而非聚簇索引的葉子節(jié)點仍然是索引節(jié)點,只不過有指向?qū)?yīng)數(shù)據(jù)塊的指針。)
索引我們分為四類來講 單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引。這里我們只說說第一個和第二個。
單列索引:一個索引只包含單個列,但一個表中可以有多個單列索引。 這里不要搞混淆了。
- 普通索引:MySQL中基本索引類型,沒有什么限制,允許在定義索引的列中插入重復(fù)值和空值,純粹為了查詢數(shù)據(jù)更快一點。
- 唯一索引:索引列中的值必須是唯一的,但是允許為空值。
- 主鍵索引:是一種特殊的唯一索引,不允許有空值。
組合索引:(也叫聯(lián)合索引(多列聯(lián)合))
在表中的多個字段組合上創(chuàng)建的索引,只有在查詢條件中使用了這些字段的左邊字段時,索引才會被使用,使用組合索引時遵循最左前綴集合。例子如下:
聯(lián)合索引 (a,b,c) 實際建立了 (a)、(a,b)、(a,b,c) 三個索引.
?
總結(jié)
以上是生活随笔為你收集整理的索引是建的越多越好吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022-2028年中国微藻行业市场调查
- 下一篇: 2022-2028年中国微型汽车市场投资