2010-06-29 200 views
3

我有id, member_id, topic_id字段。有時我使用id,有時member_id,有時使用條款中的topic_id。我可以添加索引到它們全部嗎?它會讓它變慢嗎?我是MYSQL優化的新手,所以謝謝。Mysql索引,我可以添加多少個?

回答

4

未使用的索引不會使SELECT速度變慢,但是您添加的每個索引都會減慢INSERT和UPDATE。

一個MyISAM表可以有索引的最大數量爲64

+0

它會使INSERT和UPDATE慢很多還是隻有一點點?正如我可以看到你很擅長php/mysql,請檢查這個問題,如果你有時間:http://stackoverflow.com/questions/3138487/how-many-fields-is-normal-to-have-in-一張表 – 2010-06-29 08:08:53

+3

一般來說,除非您正在執行巨大的更新,否則不值得擔心。對於大型插入,您可以臨時刪除索引並在之後重新構建它們 – 2010-06-29 08:14:09

+1

此外,您可以使用EXPLAIN找出給定查詢是否使用了您期望的索引,並且還可以幫助您發現對新索引的需求 – 2010-06-29 08:15:25

2

在一般情況下,你想在每場單獨的指數,如果你只在單一領域進行過濾你的查詢,如下面的案例:

SELECT * FROM your_table WHERE id = ?; 
SELECT * FROM your_table WHERE member_id = ?; 
SELECT * FROM your_table WHERE topic_id = ?; 

如果id字段是主鍵,然後就是可能已經使用clustered index。因此,它看起來像你可能想嘗試member_idtopic_id創建兩個單獨的non-clustered indexes

CREATE INDEX ix_your_table_member_id ON your_table (member_id); 
CREATE INDEX ix_your_table_topic_id ON your_table (topic_id); 

您還可能有興趣在研究的covering indexes的話題。