0

我遇到了一些问题,也就是说,我有一个包含一些单词的数据库,大概有 900,000 个,我想做的是检查其中是否有一个单词,如果是,则返回该行中的另一个字段。

当我这样做时,我会超时。我知道我可以更改超时,但我真正想要的是尽可能让它更快。我的访客不想等待 30 多秒才能得到他想要的东西。

我无法制作 900,000k 静态文件,因为我在托管中有 inode 限制。

所以我几乎被关起来了,所以我能做些什么来让它变得更好?

表结构:

身份证 | 词 | 换句话说

CREATE TABLE `database` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `word` text COLLATE utf8_unicode_ci NOT NULL,
 `md5string` text COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=966277 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

询问:

mysql_query("SELECT otherword FROM table WHERE word='$word'");

另一个查询:

mysql_query("SELECT word FROM table WHERE otherword='$otherword'");

主查询(使用 GET 的文件)

$word = $_GET["word"];
echo $word;
$check = mysql_query("SELECT md5string FROM `database` WHERE word='$word'") or     die(mysql_error());
while (mysql_num_rows($check)>0)
{
$out = mysql_fetch_array($check);
$output = $out[0];
}
4

4 回答 4

2

如果搜索更多然后更新,则添加fulltex index并使用表。MyIsam否则根据需要添加索引。

于 2012-04-07T01:23:40.033 回答
1

如果您有一个合理的索引,那么在 MySQL 数据库中搜索超过 100 万行应该不是问题。

尝试向您的数据库添加索引,如下所示(假设您要查找的单词在它自己的列中):

ALTER TABLE your_word_table ADD KEY(word_column(32));

(编辑为包括密钥长度,因为事实证明它们是TEXT列)

于 2012-04-07T01:20:46.430 回答
1

一百万不应该是30秒。你能给我们你的查询和表结构吗?尝试对字段使用全文索引。尝试使用仅搜索大写字母的大写单词定义搜索行等技巧。

ALTER TABLE  `database` ADD FULLTEXT (
 `word` , `md5string` );
于 2012-04-07T01:23:21.327 回答
1

这应该使您在完成后快速查找。更新以包含要索引的列的数量,因为这些是文本字段。

ALTER TABLE `database` ADD INDEX word_idx (word (32)), ADD INDEX md5_idx(md5string (32))

您是否将表命名为“数据库”?它是 MySQL 中的保留字,可能会让您有些头疼......

于 2012-04-07T01:24:35.990 回答