MySQL-101简介中的索引?

MySQL-101简介中的索引?,mysql,database,indexing,Mysql,Database,Indexing,我一直致力于创建表和键,这些都是基本的东西。没有索引方面的经验。所以问题是:我需要手动创建任何索引,还是MySQL为我创建的所有表自动创建索引 如果我需要创建它们,这是否意味着任何带有PK和FK的列都需要索引,或者此业务逻辑与哪些列需要索引,哪些不需要索引有关。您必须创建它们 PK是索引,FK也是。(因此无需在PK或FK上创建索引) 必须为WHERE语句中出现的任何列创建索引。您需要自己创建索引。PK实际上是索引本身,所以不需要对这些列进行双重索引。而FKs只能针对索引列实现 至于何时何地实施索

我一直致力于创建表和键,这些都是基本的东西。没有索引方面的经验。所以问题是:我需要手动创建任何索引,还是MySQL为我创建的所有表自动创建索引


如果我需要创建它们,这是否意味着任何带有PK和FK的列都需要索引,或者此业务逻辑与哪些列需要索引,哪些不需要索引有关。

您必须创建它们

PK是索引,FK也是。(因此无需在PK或FK上创建索引)


必须为WHERE语句中出现的任何列创建索引。

您需要自己创建索引。PK实际上是索引本身,所以不需要对这些列进行双重索引。而FKs只能针对索引列实现

至于何时何地实施索引,我建议阅读以下内容:


  • 需要注意的是,不要盲目地到处添加索引。这通常是个坏主意。相反,计划和测试。只添加在您的特定使用中可以给您带来可衡量收益的索引。索引不是免费的,所以不要随便乱扔…

    FK不是索引。FKs只能应用于索引列,因此需要索引该列。而且MySQL只能在每个查询中使用一个索引,因此盲目地索引where子句中的每一列可能会降低您的速度(插入/更新、更多磁盘空间等),而不是提供好处……我发现sitepoint文章是三个链接中最有帮助的。