【问题标题】:MySQL: should I make all columns in my table indexed?MySQL:我应该将表中的所有列都编入索引吗?
【发布时间】:2012-06-23 09:50:04
【问题描述】:

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

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

【问题讨论】:

  • 预计有多少种类型?最多 10 个 - 或更多?

标签: mysql sql indexing


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    您需要为所有 3 列建立一个索引

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

    【讨论】:

      猜你喜欢
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 2017-12-24
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多