2010-07-20 109 views
1

我有一些關於數據庫索引的一般問題。等待任何問題的答案:mysql索引大小和重複問題

  1. 如何計算索引佔用的總內存大小。是指數的大小與其Cardinality成正比嗎?

  2. 我們需要索引主鍵,還是索引它自己的索引。如果主鍵被索引了兩次(在創建表時自動執行,然後用不同的名稱手動執行),它將如何影響選擇,插入和更新查詢的內存和處理速度?

  3. 我們可以在使用組合索引時安排或控制seq_in_index。如果是的話,在個別指數的基數方面做什麼最好的方法是什麼?

非常感謝!

回答

0

一個古老的問題,我很驚訝沒有答案。我會採取刺。

  1. 表中的所有索引的總大小可以通過「SHOW TABLE STATUS」來看到。我擔心我不知道如何獲得單個索引的真實大小,但它可能與所用列的大小和指向該行的指針一樣簡單。索引的大小取決於行數和索引的寬度。由於每行都必須出現在索引中,因此基數應該沒有關係。
  2. 主鍵自動獲取索引。記住它是一個唯一的索引,不允許有NULL(與「普通」索引相比)。除非在封面下方的mysql很智能,否則創建第二個索引將創建第二個索引。每個附加索引佔用空間(磁盤/內存)和時間(插入/更新/刪除)。
  3. 是的,您可以控制組合索引中的序列。我使索引(至少)匹配WHERE子句(包括連接),如果可能,包括從該表中SELECTED的列,以便可以從索引收集所有內容,並且不需要讀取底層行。至於基數,儘可能快地去除儘可能多的行。

希望有所幫助。