MySQL:我应该将表格中的所有列编入索引吗?

时间:2012-06-23 09:50:05

标签: mysql sql indexing

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

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);

2 个答案:

答案 0 :(得分:4)

对于该特定查询,您可能会受益于多列索引:

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

我建议您分析您的代码。尝试将实际数据添加到测试数据库并尝试一些不同的索引。使用EXPLAIN查看MySQL实际用于每个查询的索引。

完成测试后,删除所有未使用的索引,因为虽然索引可以加快查询速度,但它们也会减慢对表的修改速度。

答案 1 :(得分:2)

您需要所有3列的索引

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