如果我理解正确,索引列将提高 SELECT 速度但降低 INSERT 速度。
假设您的应用程序是新的,并且您已经确定了适合索引的列(基于您查看视图的方式,例如 WHERE / JOINS)。
您是否必须在注意到性能问题之前就立即为这些列建立索引?还是为了不影响 INSERT 而在以后执行它们是否有意义?
如果我理解正确,索引列将提高 SELECT 速度但降低 INSERT 速度。
假设您的应用程序是新的,并且您已经确定了适合索引的列(基于您查看视图的方式,例如 WHERE / JOINS)。
您是否必须在注意到性能问题之前就立即为这些列建立索引?还是为了不影响 INSERT 而在以后执行它们是否有意义?
简短的回答 - 是的。
在有联接的地方,您还应该有主键和外键约束,并且大多数 DBMS 会坚持认为每个约束都由索引支持(即使它必须为您创建一个)。
大多数数据库中的绝大多数流量都是 SELECT,因此在性能成为问题之前推迟创建索引只会让自己失败。你知道你会需要它们,所以不要让自己悲伤,开始时就把它们放进去。
(而且,无论如何,不会是您注意到“性能问题”——而是您不满意的用户)。
通过在重要的选择查询上插入相关索引来进行少量谨慎的计划。是的,你会得到好处,20 毫秒与 80 毫秒你可能不会注意到,但这可能是一个好处。您会注意到执行 MySQL 服务器功能的 CPU/IO 资源会更低。
除非你有大量的插入/更新/删除,不要担心索引的修改速度,但仍然只添加需要的列。
使用explain来确保你的索引被使用。了解mysql如何使用索引和查询优化的原则。当你有一个小数据集时,是获得创建正确索引的技能的好时机,因为通常可以非常快速地添加/删除索引以进行实验。