2011-01-18 10 views
0

合計150,000レコード(名前)のmysqlデータベースを使用しています。 '名前'フィールドの検索は、PHPのオートコンプリート機能によって行われます。テーブルのインデックスは作成されましたが、検索が少し遅くなっていると感じます(Google Financeのようなものとほぼ即時の応答)。私たちは、/ 2の可能性wを思い付いたが、より多くの洞察を取得したい:mysqlストアドルーチンとmysql-alternative?

  1. は、我々は検索をスピードアップするためにストアドプロシージャの束(何千以上)を作成することができ、または多くのストアドプロシージャのことを作成しますbog-データベースをダウンしますか?

  2. "select"ステートメントの方が速いです(&の挿入時の速度はそれほど重要ではありませんので、必要ならば犠牲にすることができます)。私は、JOIN文をサポートしていないBigTable &を漠然に聞いています....私たちが行っている他のいくつかの問い合わせに対してJOIN文が必要です。

THX

+0

と一緒に提供してください。 http://dev.mysql.com/doc/refman/5.1/en/optimization.htmlを試しましたか?通常、最初の使用時に、特に素晴らしい結果が得られます。 – Osw

+0

私はキャッシングについて読み上げます。主要なデータベース(つまり、mysqlとoracle、またはcassandraなど)のそれぞれの長所と短所を比較した優れた論文(またはビデオ)がありますか? mysqlにもっと詳しく調べる前に、私は正しいd-baseを持っていることを確認したいと思います。 –

+1

待って、名前から名前を選択してください。 'foo%'のような名前は10秒かかりますか?それはしないでください。これは単純なインデックス操作です。あなたはインデックスを持っていますか? 'explain'出力と一緒にサンプルクエリを与えてください。 – derobert

答えて

1
  1. ストアドプロシージャについては忘れてください。彼らはあなたのために何もしません。
  2. Mysqlは良い選択ですが、多くの場合、最も高速なRDBMSとみなされます。そして、「選択されたステートメントのより速い選択肢」を探す必要はありません。

あなたが言及した異常なクエリの実行時間は、サーバーの設定ミスやデータベーススキーマの誤り、またはその両方の結果です。 this response on serverfaultを読んだり、ここであなたの質問を更新してください:サーバー構成、データベーススキーマの一部、問題クエリの一部をexplain select ...

0

あなたは、データベースへの繰り返し呼び出しを避けるためにメモリ内の情報をキャッシュする必要があります。

+0

は、キャッシュ内に何千ものselect文があると、遅くなるでしょうか?私が持っている閉鎖の例は、Google Financeのオートサーチ機能です...キャッシュ内のティッカー(&部分的なティッカー)へのすべての呼び出しを実用的に保存するか、他の何かをする可能性がありますか? –

+0

また、元のデータがテーブル内で変更されたときにどうなりますか...キャッシュは古いデータを返し続けますか? –

+0

数十万のレコードがキャッシュの問題ではありません。 –

0

はい、データを変更する場合はキャッシュを期限切れにする必要がありますが、それは一般的ではないため、半自動で行い、必要に応じて心配する必要はありません。 this MySQL.com articleをチェックアウトするだけでなく、おそらくMEMORYストレージエンジンを探索する必要があります(ごめんなさい、新しく、投稿ごとに複数のハイパーリンクを投稿することはできませんか?)。

実際のクエリ時間(vsページ時間)はどのくらいですか?地獄にロードされていない合理的に現代的なサーバーでは、MySQLは150k行で2秒以上ずっと速く自動完成クエリを実行できるはずです。いくつかのインデックスがありませんか?