現在、utf8 mysql データベースを使用しています。翻訳がデータベースに既に存在するかどうかを確認し、存在しない場合は翻訳を実行してデータベースに保存します。
SELECT * FROM `translations` WHERE `input_text`=? AND `input_lang`=? AND `output_lang`=?;
(もう 1 つのフィールドは「output_text」です。) 基本的なデータベースの場合、最初に入力テキストを「input_text」「TEXT」フィールドと 1 文字ずつ比較します。文字が一致している限り、それらを比較し続けます。それらが一致しなくなると、次の行に進みます。
データベースが低レベルでどのように機能するかはわかりませんが、基本的なデータベースの場合、入力テキストがデータベースにないと判断する前に、データベースのすべての行から少なくとも 1 文字を検索すると思います。
理想的には、入力テキストはハッシュ コードに変換され (たとえば、sha1 を使用)、各 "input_text" もハッシュになります。次に、データベースが適切にソートされていれば、ハッシュに一致するすべての行をすばやく見つけて、実際のテキストをチェックできます。一致するハッシュがない場合、各行が手動でチェックされていなくても、結果は返されません。
このようなことを行うことができる mysql ストレージ エンジンのタイプはありますか、それとも物事を最適化できる追加の php はありますか? 「input_text」をある種の「インデックス」に設定する必要がありますか? (プライマリ/ユニーク/インデックス/フルテキスト)
mysql よりもはるかに優れた、php と互換性のある別のタイプのデータベースはありますか?
編集: これは、MySQL の B-Tree とハッシュ インデックスについて話します:
http://dev.mysql.com/doc/refman/5.5/en/index-btree-hash.html
ハッシュ インデックスの制限はどれも私にとって問題ではありません。それはまた言います
これらは、= または <=> 演算子を使用する等価比較にのみ使用されます (ただし、非常に高速です) 。
[「非常に」は彼らによってイタリック体にされた]
新しい質問:
"input_text" TEXT をハッシュ インデックスに設定するにはどうすればよいですか? ところで、複数の行に同じ「input_text」が含まれています...ハッシュインデックスには問題ありませんか?
http://dev.mysql.com/doc/refman/5.5/en/column-indexes.html
「MEMORY ストレージ エンジンはデフォルトで HASH インデックスを使用します」とありますが、これは、ストレージ エンジンを変更して、列のインデックスを INDEX に設定する必要があるということですか?