0

つまり、900,000 のようないくつかの単語のデータベースがあり、単語が含まれているかどうかを確認し、含まれている場合は別のフィールドを返します行。

タイムアウトを変更できることはわかっていますが、実際に望んでいるのは、可能であればどうにかして速くすることです。私の訪問者は、探しているものを得るために 30 秒以上待ちたがりません。

ホスティングに inode 制限があるため、900,000k の静的ファイルを作成できません。

だから私はかなり閉じ込められているので、それを改善するためにできることはありますか?

テーブル構造:

ID | 単語 | 別言

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して使用します。MyIsamOthervise は、要件に従ってインデックスを追加します。

于 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

100 万は 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 に答える