我在 MySQL 数据库中有一本英语词典,条目刚刚超过 250K,我正在使用一个简单的 ruby 前端在字符串开头使用通配符进行搜索。到目前为止,我一直在这样做:
SELECT * FROM words WHERE word LIKE '_e__o'
甚至
SELECT * FROM words WHERE word LIKE '____s'
我总是知道单词的确切长度,但除了单个字符之外的所有字符都可能是未知的。
这比 molasses 慢,比没有前导通配符的类似查询慢大约 15 倍,因为不能使用列的索引。
我尝试了一些方法来缩小搜索范围。例如,我添加了 26 个额外的列,其中包含每个单词的单个字母计数,并首先使用这些列来缩小搜索范围。我也尝试过按字长缩小。由于前导通配符搜索固有的低效率,这些方法几乎没有区别。我已经尝试过 REGEXP 语句,它甚至更慢。
SQLite 和 PostgreSQL 与 MySQL 一样有限,尽管我对 NoSQL 系统的经验有限,但我的研究给我的印象是它们擅长可扩展性,而不是我需要的那种性能。
那么我的问题是,我应该在哪里寻找解决方案?我是否应该继续尝试寻找优化查询的方法或添加可以缩小潜在记录集的补充列?是否有专门设计用于实现这种快速通配符搜索的系统?