MySQL:我应该为表中的所有列建立索引吗?

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

最佳答案

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

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

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

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

关于MySQL:我应该为表中的所有列建立索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11168518/

相关文章:

.NET 的 MySQL 连接器 - 它真的成熟吗?

mysql - 优化子查询,使两个查询成为一个

mysql - 获取列 MySQL 中至少为空值之一的行数据

java - 在执行查询且未进行任何更改(自动提交为 "off")后,我们是否需要 commit() 数据库连接?

sql - 由于外键约束强制执行,无法删除索引

javascript - 返回 Javascript 类内部元素中元素的当前索引

c# - MySQL左填充和更新

mysql - 如何在 MySQL 中返回数据透视表输出?

sql - Postgres 使用具有 'record/' 类型参数的函数检查约束

indexing - IP 地址的索引范围搜索算法