我有三个字段:id,member_id和topic_id
。 有时我在WHERE
子句中使用id
,有时使用member_id
,有时使用topic_id
。 我是否可以为它们全部添加索引? 这样做会使查询变慢吗? 我对MYSQL优化不太熟悉,谢谢。
SELECT * FROM your_table WHERE id = ?;
SELECT * FROM your_table WHERE member_id = ?;
SELECT * FROM your_table WHERE topic_id = ?;
id
字段是主键,那么它可能已经使用了聚集索引。因此,看起来您可能想尝试在member_id
和topic_id
上创建两个单独的非聚集索引:CREATE INDEX ix_your_table_member_id ON your_table (member_id);
CREATE INDEX ix_your_table_topic_id ON your_table (topic_id);
您可能也对研究覆盖索引这个主题感兴趣。
INSERTs
和UPDATEs
不会变慢。https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html-- 我通常用于INNODBSET AUTOCOMMIT = 0; SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0; -- 其中之一 -- REPLACE INTO () VALUES () UPDATE ON DUPLICATE; -- INSERT INTO () VALUES (); -- INSERT INTO (SELECT ... FROM ...); -- CREATE TABLE AS (); -- ALTER TABLE (); SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1; COMMIT; SET AUTOCOMMIT = 1; - JayRizzo