質問

私は、データベースの効率質問があります。

ここに私のテーブルに関するいくつかの情報があります:

およそ500-1000レコードの

-table -recordsを加え、毎日削除されます。 - 同じ量を加えて毎日を削除したことについて、通常は持っている(アクティブレコードのサイズは同じまま)

さて、私はレコードを削除するとき、私の質問は.....で、...私は(A)レコードを削除し、新しいテーブルに移動する必要がありますか?

それとも、... I(B)は、ちょうど持っている必要があり、「アクティブ」列とそれは長くアクティブでないとき0にレコードを設定します。

私のサイトは、ユーザーが/ソート(AJAXを使用して)その場で500-1000レコードのこのテーブルをフィルタリングすることができることに基づいているので、私はBを使用することを躊躇していた理由がある....ので、私はそれをする必要がありますできるだけ速く、...(私はフィルタリングするために遅くなるだろう多くのレコードを持つテーブルを推測している)...と私は、MySQLのInnoDBを使用しています。

任意の入力が、おかげで素晴らしいことだ。

アンドリュー

役に立ちましたか?

解決

現実的に、これはDB効率についてのが、ネットワークの遅延と、あなたがネットワーク経由で送信しているデータの量についての質問ではありません。限りMySQLが行くように、1000行または100kの行は、超高速であることを行っているので、それは問題ではありません。

あなたはそれらの行に相当量のデータを持っている、とあなたは、フィルタリングのためにAJAXを介してクライアントにそれをすべて送信している場合は、

しかし、ネットワークの遅延は、あなたのボトルネックとなっています。あなたは、行あたりのバイト数(20と言う)の一握りを送信しているし、あなたのテーブルの長さが約1000のレコードがままの場合、ない大きな問題ます。

一方で、あなたのテーブルが20K行、たとえば、に(非アクティブレコードに)成長した場合、今、あなたは400kの代わりに20Kを送信しています。ユーザーは気づくでしょう。レコードが大きい場合は、テーブルが大きくなるにつれて、問題はより深刻になります。

あなたは本当にサーバー側でフィルタリングを行う必要があります。あなたはアヤックスを通してそれを送信し、完全な1秒か2秒を費やす前に、MySQLがあなたのテーブルをフィルタリング2msのを費やしてみましょう。

他のヒント

〜1000年の記録は非常に少ない数です。

レコードを削除することができ、後で再追加した場合は、

、多分それは「アクティブ」インジケータを持っていることは理にかなっています。

それはあなたが上のソート方法と、テーブルがインデックス化された/フィルタリングしているかに依存します。

第三、およびまれではない、オプション、あなたはレコード(B)を不活性化するハイブリッドアプローチを有することができる(必要に応じてタイムスタンプ付き)と定期的に別個の表(A)(ひとまとめに、またはに基づいて、いずれかにそれらをアーカイブタイムスタンプ歳)。

あなたのテーブルには順序1000行にある場合は、

現実的に、それはおそらく、(他の要因のスケーラビリティが知られていると仮定して)その上あまり騒ぎ価値はありません。

あなたには、いくつかの将来の目的のために記録を保持する必要がある場合は、

、私は非アクティブビットを設定します。

レコードをSELECTingとき

限り、あなたはテーブルの主キーを持っているように、パフォーマンスが優れなければなりません。

はまた、あなたがフィルタリング/クライアント側でソートしなければ、その後の記録は、一度だけ取得する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top