2

まず第一に、私はまだPHP / mySQLに非常に慣れていないので、それがあなたにとって単純すぎる場合は私の質問を許してください:)

これが私の問題です:私は現在、mysqlデータベースに大量のデータを保存することに取り組んでいます。基本的には息子の学校のアーカイブのようなディレクトリです。

構造は基本的に次のとおりです。

ID、キーワード、タイトル、説明、URL、ランク、ハッシュ

id is int 11
keyword is varchar 255
title is varchar 255
description is text
url is varchar 255
rank is int 2
hash is varchar 50

上記のフィールドを含む約1,000万行を挿入する予定であり、私の使命はデータベースにできるだけ速くクエリを実行できるようにすることです。

私のクエリは常に正確なキーワードに対するものです。

例えば:

select * from table where keyword = "keyword" limit 10

タイトルや説明などではなく、キーワードをクエリするだけです。キーワードごとに最大10件の結果があります。これ以上になることはありません。

mysqlのインデックスなどについては本当の手がかりはありませんが、いくつかのインデックスがあると速度が向上する可能性があることを読みました。

ここで、プロの助けが必要です。私の使命は、可能な限り最速のクエリを実行できるようにすることです。そのため、データベースのクエリにそれほど時間はかかりません。キーワードフィールドのみを検索しているので、数百万行ある場合でも、結果をすばやく返すことができるようにする方法があると確信しています。

私がすべきことをあなたは何を提案しますか。キーワードフィールドをINDEXに設定する必要がありますか、それとも他に何かを監視する必要がありますか?INDEXESについての本当の手がかりがないので、あなたの助けに感謝します。つまり、インデックスを使用する必要があるのか​​、キーワード、タイトル、説明などすべてに使用する必要があるのか​​わかりません...

データベースは頻繁に更新されます-それが重要な場合に備えて。

何百万もの行を保存し、1秒未満でクエリを実行することさえ可能だと思いますか?

カスタムmy.cnf設定などの他の提案も役立ちます。

あなたの助けは大歓迎です。

4

2 に答える 2

1

列にインデックスを追加しkeywordます。速度が大幅に向上します。次に、ミリ秒単位でデータをクエリすることは問題ありません。

where一般的には、句で使用しているフィールドにインデックスを付ける必要があります。そうすることで、DBはデータを非常に高速に制限し、結果を返すことができます。

于 2012-10-28T19:46:02.260 に答える
1

あなたの直感は正しいです-あなたがkeywordあなたのWHERE節でフィルタリングしているだけなら、それは索引付けされるべきであり、そうすればあなたはおそらく実行速度のいくらかの改善を見るでしょう

CREATE INDEX `idx_keyword` ON `yourtable` (`keyword`)

実行コマンドよりもインデックスの作成を容易にするPHPMyAdminのようなクライアントを使用している可能性がありますが、のMySQLドキュメントをCREATE INDEX確認してください。あなたのケースは非常にありふれたケースなので、特別なオプションは必要ありません。

これは当てはまりませんが(1つあたり最大10行になると言ったようにkeyword)、すでに一意の制約がある場合、PRIMARY KEYまたはFOREIGN KEYで定義されてkeywordいる場合は、インデックスとしても機能します。

于 2012-10-28T19:46:12.220 に答える