繁体   English   中英

MySQL:非主键列上的索引

[英]MySQL: index on non-primary key column

是否可以使用除主键以外的其他列作为索引,这样做有什么缺点吗?

绝对。 这对于条件不是您的主键的SELECT ... WHERE有帮助。 但是,请注意,不要索引过多-仅索引您需要的内容。

我的许多表除主键外还具有辅助索引。 您可以为每个表创建多个索引,但是在MySQL中,给定查询中的每个表仅使用一个索引。

您应该创建哪些索引? 这取决于您的查询。 请参阅我本周所做的演示,“指导您的索引”

添加更多索引会逐渐增加插入/更新/删除的开销。 更改数据时,RDBMS必须使索引保持同步。 但是,正确的索引为您的选择查询带来了很多好处,几乎比保证维护它们的开销更合理,这几乎总是正确的。


使用多个索引会大大降低性能吗?

在《 SQL的艺术》一书中,作者对此进行了测试,发现添加多个索引会带来更大的性能影响。 但是有趣的是,它并没有线性上升。 第二,第三等索引的额外开销呈大致对数曲线下降。 也就是说,两个索引的价格不比一个索引高两倍。 四个索引并不比两个索引贵两倍。

您可以选择其他方式

MySQL索引的优点一般来说,将MySQL索引到数据库可为您带来三个优点:

  • 查询优化:索引使搜索查询更快。
  • 唯一性:主键索引和唯一索引等索引有助于避免重复的行数据。
  • 文本搜索:在MySQL 3.23.23版中,全文索引使用户有机会针对位于这样索引的任何字段中的大量文本进行优化搜索。

MySQL索引的缺点在列上创建索引时,MySQL还会创建一个单独的文件进行排序,并且仅包含您感兴趣的字段。

  • 首先,索引占用磁盘空间。 通常,空间使用并不重要,但是由于在每种可能的组合中的每一列上都创建了索引,因此索引文件的增长将比数据文件快得多。 如果表的大小很大,则索引文件可能会达到操作系统的最大文件大小。

  • 其次,索引减慢了诸如INSERT,UPDATE和DELETE之类的查询编写速度。 因为MySQL必须在内部维护实际数据文件中插入行的“指针”,所以在上述写查询的情况下,必须付出性能代价,因为每次记录更改时,索引都必须更新。 但是,您可以以不会引起明显的性能下降的方式编写查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM