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