簡體   English   中英

MySQL:非主鍵列上的索引

[英]MySQL: index on non-primary key column

是否可以使用除主鍵以外的其他列作為索引,這樣做有什么缺點嗎?

絕對。 這對於條件不是您的主鍵的SELECT ... WHERE有幫助。 但是,請注意,不要索引過多-僅索引您需要的內容。

我的許多表除主鍵外還具有輔助索引。 您可以為每個表創建多個索引,但是在MySQL中,給定查詢中的每個表僅使用一個索引。

您應該創建哪些索引? 這取決於您的查詢。 請參閱我本周所做的演示,“指導您的索引”

添加更多索引會逐漸增加插入/更新/刪除的開銷。 更改數據時,RDBMS必須使索引保持同步。 但是,正確的索引為您的選擇查詢帶來了很多好處,幾乎比保證維護它們的開銷更合理,這幾乎總是正確的。


使用多個索引會大大降低性能嗎?

在《 SQL的藝術》一書中,作者對此進行了測試,發現添加多個索引會帶來更大的性能影響。 但是有趣的是,它並沒有線性上升。 第二,第三等索引的額外開銷呈大致對數曲線下降。 也就是說,兩個索引的價格不比一個索引高兩倍。 四個索引並不比兩個索引貴兩倍。

您可以選擇其他方式

MySQL索引的優點一般來說,將MySQL索引到數據庫可為您帶來三個優點:

  • 查詢優化:索引使搜索查詢更快。
  • 唯一性:主鍵索引和唯一索引等索引有助於避免重復的行數據。
  • 文本搜索:在MySQL 3.23.23版中,全文索引使用戶有機會針對位於這樣索引的任何字段中的大量文本進行優化搜索。

MySQL索引的缺點在列上創建索引時,MySQL還會創建一個單獨的文件進行排序,並且僅包含您感興趣的字段。

  • 首先,索引占用磁盤空間。 通常,空間使用並不重要,但是由於在每種可能的組合中的每一列上都創建了索引,因此索引文件的增長將比數據文件快得多。 如果表的大小很大,則索引文件可能會達到操作系統的最大文件大小。

  • 其次,索引減慢了諸如INSERT,UPDATE和DELETE之類的查詢編寫速度。 因為MySQL必須在內部維護實際數據文件中插入行的“指針”,所以在上述寫查詢的情況下,必須付出性能代價,因為每次記錄更改時,索引都必須更新。 但是,您可以以不會引起明顯的性能下降的方式編寫查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM