哪个更快,全表扫描还是建立索引?

文章指出,在某些情况下,全表扫描的效率可能超过建立索引。作者通过列举不同场景,如小型计费服务的消息搜索、Shell历史记录的命令查找、舞蹈搜索工具和病毒计数浏览器等,说明在数据量不大或查询需求不频繁时,简单扫描可能更优。建议先考虑全表扫描,当性能成为问题时再添加索引,尤其是在查询时间和摄入时间的权衡上。
摘要由CSDN通过智能技术生成

最近在 HN 上看到一个帖子:全表扫描优于建索引的情况,看了一下作者原文 ,还挺有趣的,分享给大家。

有时为了方便快速搜索大量数据,一种方法是建立索引进行预处理,这样搜索只需要查看一小部分数据。然而,值得建立索引的门槛可能比你想象的要高。以下是我经历过的全表扫描反而更好的案例:

  • 十年前我为一个小型计费服务编写了一个内部通信应用程序。消息存储在 MySQL 中,如果全表搜索变慢或者遇到负载问题的时候,我就会添加索引;但即使有 10 年的消息需要搜索,在没有安装和维护 Sphinx(当时MySQL 还不支持 InnoDB FULLTEXT 索引,v5.6 之后才加上)情况下它还是能保持响应。
  • 我最近发现有人维护了一个 0.5GB 的全文索引来搜索他 shell 历史记录中 100k 个命令。我在平面文件上用 grep,测试了一下,现在查询我 180k 历史条目需要 200ms
  • 我的 contra 舞蹈搜索工具 根据查询对每个舞蹈进行排名,并且没有地理空间索引,因为其实只有 ~350 个舞蹈。
  • 我最近工作的时候会用一个病毒计数浏览器 来实时检索人类病毒分类树,用 JS 的 includes 命令扫描约 15k 名称几乎就跟你打字速度一样快。
  • 我在广告业 (小编注:作者曾在 Google Ads 上班) 工作时,我经常需要使用生产日志来调试问题,并使用 Dremel (Melnik 2010, Melnik 2020) 分布式扫描大量数据,速度非常快。因为查询相对较少,所以维护索引的成本要高得多。

除非你从一开始就知道会搜索数亿条记录,否则请考虑从简单扫描开始,并仅在性能难以接受时添加索引。即使这样,在查询较少且变化较大的情况下,在摄入时间而不是查询时间方面做些改进可能效果更好。


💡 你可以访问官网,免费注册云账号,立即体验 Bytebase。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值