MySQL的:我应该让我的表中的所有列索引?(MySQL: should I make all co

2019-09-18 10:15发布

我有一个数据透视表,嗯,当然每一行都将被包含在一个查询:

mysql> select * from blog_posts as bp 
       join blog_joins as bj 
       on bj.post_id=1 
       and bj.taxonomy_id=10
       and bj.type = 1;

这里是我的表结构:

最好先为每个列的索引? 如果不是,为什么会和你有什么建议?

mysql > alter table blog_joins add index pid (post_id);
mysql > alter table blog_joins add index tid (taxonomy_id);
mysql > alter table blog_joins add index tp (type);

Answer 1:

对于特定的查询,你可能会从一个多列索引中获益:

alter table blog_joins add index pid_tid_tp (post_id,taxonomy_id,type);

我建议剖析你的代码。 请尝试将真实的数据来测试数据库,并尝试一些不同的索引。 使用EXPLAIN以便了解哪些索引MySQL的实际使用为每个查询。

一旦你完成了测试删除未使用的索引,因为尽管索引可以加快查询,他们也将修改表放缓。



Answer 2:

你需要为所有3列的索引

create index bjind on blog_joins (post_id, taxonomy_id, `type`);


文章来源: MySQL: should I make all columns in my table indexed?