2010-05-19 69 views
0

如果這是一個愚蠢的問題,我很抱歉(因爲這聽起來不太可能)。mysql/innodb表的索引部分?

我有一張20萬行的表格。但是,這些行中只有大約300K被定期訪問,並且它們可以在名爲「app_user = 1」的列條件中被識別。

有沒有辦法,我可以索引這些行,當我調用select時,我會一定要通過這個條件嗎?

+0

聽起來表分區可以幫助:http://dev.mysql.com/tech-resources/articles/mysql_5.1_partitions。 html – 2010-05-19 16:06:06

+0

感謝您的提示!非常感謝。如果你添加它作爲答案,我會投它 – 2010-05-19 16:52:35

回答

1

我會建議將表分成兩個單獨的表。但是如果你不想這樣做,如果你總是在你的查詢中包含「where app_user = 1」,那麼執行此操作的最高性能方法是在包含app_user列的表上創建一個主鍵作爲關鍵的第一部分。 InnoDB將使用它作爲聚集索引,爲您節省一些額外的磁盤訪問。您可以創建表是這樣的:

創建表TestTable的( APP_USER TINYINT UNSIGNED默認爲0, ID INT UNSIGNED NOT NULL, 名稱爲varchar(255),默認', PRIMARY KEY K1(APP_USER,ID) )ENGINE = InnoDB;

一個朋友在InnoDB中寫了這篇文章上聚集索引而回: http://www.joehruska.com/?p=6

1

添加一個名爲app_user和index的列,然後在查詢中傳入「WHERE app_user = 1」。

您可以進一步根據該列對錶格進行分區。

+0

多麼酷的新功能 - 謝謝! – 2010-05-19 16:52:06