我对mySQL和PHP有些新意。我有a little program that looks up a text's words in an etymological dictionary。 - Source here on github。它每秒只能查找1-3个单词,这是一个真正的限制,特别是当我试图分析一个大于千字的文本时。有没有办法可以更好地构建我的查询或数据库,以便我可以加快这个过程?
查找单词的功能:
function lookup($word) {
//connect to database
$query="SELECT parent_lang FROM etym_dict WHERE word=\"$word\" and word_lang=\"eng\""; //making this English-only for now
//debug_print("<p>Query is: $query</p>");
$result=dbquery($query)
or die("Failed to look up words in database.");
$parent_lang=mysqli_fetch_array($result);
$parent_lang=$parent_lang[0];
return $parent_lang;
}
调用该函数的东西:
foreach (array_keys($results) as $word) {
$parent_lang=lookup($word);
if (!empty($parent_lang)) {
$parent_langs[]=array($word,$parent_lang,$results[$word]);
debug_print("$word, ");
} else {
$derivation=lookup_derivation($word);
$has_derivation= (strlen($derivation)>0) ? TRUE : FALSE;
if ($has_derivation) {
$parent_lang=lookup($derivation);
}
if(!empty($parent_lang) && $has_derivation) {
debug_print("<span class=\"blue\">$word ($derivation)</span>, ");
} else if(!empty($parent_lang)) {
$parent_langs[]=array($word,$parent_lang,$results[$word]);
debug_print("<span class=\"blue\">$word</span>, ");
} else {
$not_in_dict[]=$word;
debug_print("<span class=\"red\">$word");
if ($has_derivation) {
debug_print("/$derivation</span>, ");
} else {
debug_print("</span>, ");
}
}
}
}
Db查询功能:
function dbquery($sql) {
GLOBAL $dbc;
$result=mysqli_query($dbc,$sql);
return $result;
}
Db连接功能:
function dbconnect() {
$dbc=mysqli_connect(
... // redacted
) or die ('Error connecting to database.');
return $dbc;
}
答案 0 :(得分:1)
我的第一个猜测是你没有etym_dict
上的索引,但这只是猜测,因为你没有向我们展示表格定义。