【发布时间】:2015-11-16 19:17:46
【问题描述】:
如果您的查询之一将使用SELECT *,我想知道是否有必要为表中的所有字段创建索引。
解释一下,如果我们有一个有 10M 记录的表,并且我们对其进行了 SELECT * 查询,如果我们为表中的所有字段创建了索引,或者 MySQL 是否在与SELECT first_field, a_field, last_field 不同的方式。
据我了解,如果我有一个执行 SELECT first_field, a_field FROM table 的查询,那么如果我们在 first_field, a_field 上创建索引,它会带来性能优势,但如果我们使用 SELECT *,那么为所有人创建索引是否会带来好处字段?
【问题讨论】:
-
没关系。最有可能确定使用的索引的是 WHERE 子句
-
@krock 感谢您的反馈,但这让我更加困惑。我一直认为,如果我们在 mysql 中查询一个字段,那么该字段上也应该存在一个索引。您是说索引用于 WHERE 子句中的值而不是 SELECT 子句? :o
-
查看this question。答案中说:“索引用于加快在数据库中的搜索”。索引可以加快搜索速度——而不是检索列值。
-
@krock 现在开始变得有意义了。所以,我实际上应该索引 WHERE 子句中的值,而不是正在检索的值。有道理,因为这会加快计算/寻求部分。