我有一个 MySQL 数据库,其中包含标准英文字母表中的所有单词,我用它来创建一个简单的 Scrabble 单词生成器。该数据库分为 26 个表:字母表中的每个字母对应一个表。每个表包含两列:
- “Word”列:该列是主键,类型为 char(12),不接受空值。
- “长度”列:该列包含一个无符号的 tinyint 值并且不接受空值。
在我的应用程序中,用户在文本框中输入任意数量的字母(表示他们的图块),然后我使用以下代码查询数据库:
// this is looped over 26 times, and $char is a letter between 'A' and 'Z'
// check if the user entered in character $char or a blank tile (signified by ? in app)
// this check prevents me from having to query useless tables
if (in_array($char, $lettersArray) || $blanks)
{
// if so, select all words that have a length that's possible to make
$query = 'SELECT Word FROM '.$char.'Words WHERE Length <= '.strlen($letters);
$result = $db->query($query);
$num_results = $result->num_rows;
for ($j = 0; $j < $num_results; $j++)
{
// determine if it's possible to create word based on letters input
// if so, perform appropriate code
}
}
一切正常,但与竞争对手相比,我的应用程序需要很长时间(即理论上的竞争;这更像是我为自己创建的一个学习项目,我怀疑我会在互联网上发布它),尽管事实上应用程序在我的本地计算机上。我尝试使用 phpMyAdmin 的自动优化功能,但这并没有提供明显的速度提升。