添加一个自动递增的主键并将其命名为 id。
我写了一个脚本,它把所有的单词/etc/dict
都放进去,然后在它们上面运行 md5,写下它们的名字和哈希来创建这样的东西:
"2af2fc92ed1ee8080d9ab015ab053074", "Windex's
"bfa818f0cac66108daef757706e97a99", "Windhoek
"88d0e322fb73a2e971bc982bd348c777", "Windows
我这样做的路线非常hacky,所以我不会发布我的实现方式,但总的来说它非常简单,基本上是基于:
while read line
do
echo $line | md5sum | awk '{print $1}'
done
所以我创建了一个数据库表:
CREATE TABLE whashes
(
id int auto_increment primary key,
hash varchar(32),
word varchar(16)
);
并使用:
INSERT INTO whashes
(hash, word)
VALUES
使用上面我的脚本的输出。运行速度测试。
SELECT *
FROM `whashes`
WHERE word LIKE "poop"
LIMIT 0 , 30
在 0.0324 秒内运行。这是 100k 字,应该保持在这个速度
SELECT *
FROM `whashes`
WHERE hash LIKE "b538baf8573b52b5bcfdd551fffa6e9d"
LIMIT 0 , 30
在 0.0202 秒内运行。
根据我的理解,使用自动递增的主 id 整数键,计算机能够将大量的 id 保存在缓存中,并对这些值进行一些二进制搜索。如果没有这样的键,数据库引擎必须遍历每个值来检查它,而一次检查将每次需要检查的数量减少一半。但是,这种解释可能有点不正确,但是如果我错了,其他人可能会进一步解释/纠正我。做这么简单的事情应该会给你带来很大的进步。