我遇到了一些问题atm,也就是说,我有一些单词的数据库,就像900,000,我想要做的是,检查一个单词是否在其中,如果是,则返回另一个字段这一行。
当我这样做时,我得到了时间。我知道我可以改变超时,但我真正想要的是如果可能的话以某种方式使它更快。我的访客不想等待30多秒才能得到他想要的东西。
我无法制作900,000k静态文件,因为我在托管中有inode限制。
所以我几乎被锁定了,所以我能做些什么才能让它变得更好?
表格结构:
ID |字| Otherword
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];
}
答案 0 :(得分:2)
如果搜索更多,则添加fulltex index
并使用MyIsam
表。
否则,根据要求添加索引。
答案 1 :(得分:1)
如果您拥有合理的索引,那么在MySQL数据库中搜索超过100万行应该不是问题。
尝试在数据库中添加一个索引,如下所示(假设您要查找的单词位于其自己的列中):
ALTER TABLE your_word_table ADD KEY(word_column(32));
(编辑为包括密钥长度,因为事实证明它们是TEXT
列)
答案 2 :(得分:1)
ALTER TABLE `database` ADD FULLTEXT (
`word` , `md5string` );
答案 3 :(得分:1)
这应该会在完成后快速查找。更新以包括要索引的列的数量,因为这些是文本字段。
ALTER TABLE`database`ADD INDEX word_idx(word(32)),ADD INDEX md5_idx(md5string(32))
您是否将表命名为“数据库”?这是MySQL中的一个保留字,可能会引起一些麻烦......