我在数据库中有一个几乎唯一的字段:98%的时间值是唯一的,但它可能有一些重复。我不会在这个领域做很多搜索;一个月说两次。该表目前有大约5000条记录,每月将获得约150条记录。

此字段是否应有索引?

我正在使用MySQL。

有帮助吗?

解决方案

我认为'近乎独特'可能是红鲱鱼。数据要么是唯一的,要么不是,但这并不能确定您是否希望根据性能原因对其进行索引。

答案:

5000条记录实际上并不多,无论你是否有索引,搜索仍然很快。按照这种插入速度,你需要3年时间才能达到10000条记录,这仍然不是很多 我个人不会为添加索引而烦恼,但是如果你这样做也没关系。

说明:

决定添加索引时需要考虑的是插入速度和选择速度之间的权衡。

如果没有索引,在该字段上执行 select 意味着MySQL必须遍历每一行并读取每个字段。添加索引可以防止这种情况。

索引的缺点是每次插入数据时,除了添加数据外,DB还必须更新索引。这通常是一个很小的开销,但如果你有大量的索引,并且正在进行大量的写操作,你真的会注意到它。

当您在数据库中获得这么多行时,您仍然需要一个索引,否则您的选择将需要一整天,但这只是需要注意的事项,以便您不会最终添加索引字段“以防万一我需要它”

其他提示

这根本不是很多记录;我不打算在该表上制作任何索引。该领域的相对独特性是无关紧要的 - 即使在几年前的商品硬件上,我希望该表上的查询只需要几分之一秒。

您可以使用一般的经验法则:在问题出现时进行优化。只要你注意到需要索引,就不要使用索引。

从你说的话来看,它听起来不像索引是必要的。经验法则是SELECTS中大量使用的索引字段,以加快搜索速度,从而(可以)减慢INSERTS和UPDATES。

在像你这样小的唱片机上,我认为你不会看到任何一个真实世界。

如果你每月只对它进行两次搜索,那几行,那么我会说不要将其编入索引。它几乎没用。

没有。记录不多,不会经常查询。无需索引。

这真是一个判断电话。有了这么小的表,你可以在没有索引的情况下快速搜索,所以没有它就可以顺利进行。

另一方面,创建一个你并不真正需要的索引的成本非常低,所以你不会因为不这样做而节省很多。

此外,如果您确实创建了索引,那么如果您突然开始每周获得1000条新记录,那么您将来会受到保护。可能你对这种情况有足够的了解,可以肯定地说这种情况永远不会发生,但是当你最不期望的时候,需求确实有改变的方式。

编辑:就改变需求而言,需要考虑的是:如果数据库确实增长并且您稍后发现您确实需要索引,那么您可以简单地创建索引并完成吗?或者您是否还需要更改大量代码才能使用新索引?

这取决于。正如其他人的回应,表更新速度和选择速度之间存在折衷。表更新包括表中的插入,更新和删除。

你没有提到的一个问题。该表是否具有主键和相应的索引?没有索引的表通常有利于具有至少一个索引的形式。获取该索引的最常用方法是声明主键,并依赖DBMS相应地生成索引。

如果表没有主键候选者,那通常表明表设计存在严重缺陷。这是一个单独的问题,应该进行特别讨论。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top