2017-11-30 17 views
0

私は多くのイベントのレコードを持つテーブルを持っています。各行には、「開始日」と「終了日」という2つの列があります。パフォーマンスを向上させるために、私は次の20時間のイベントだけを持つミニテーブルを作成するクロールジョブを開発することを考えていました。しかし、現在の時間に基づいて特定の行のみをフィルタリングするという見解を持つ方が良いでしょう。それはMySqlで可能ですか?現在の時刻に基づくビューを作成する(MySql)

編集:は、パフォーマンスに関して、新しい小さなテーブルと比較して、常に最悪のビューですか?

+1

があるだろうにアクセスする方法多くに依存します。小さなテーブルを作成するには、関連するレコードに一度アクセスする必要がありますが、新しいテーブルを作成することは、少なくとも10倍以上の時間といくつかの関連性のない操作を必要とします。ビューは、テーブル作成よりも影響が少ないように最適化することができます。しかし、データの相対読み取り数はどのくらいで、d/bシステムの外部でバッファリングできますか? – wallyk

+0

それはwebserviceの背後にあるので、毎秒何百ものリクエストに応答する必要があります。そのため、パフォーマンスを向上させる必要があります。 – navy1978

答えて

4

はい、where句にNOW()またはCURDATE()を参照するビューを作成できます。例えば

create view your_special_v as 
    select col1, col2, col3 
    from your table 
    where datetimecolumn >= now() 
+0

返信いただきありがとうございます。今私はちょうど "今"に20時間を合計する方法を理解する必要があります! – navy1978

+0

これは、パフォーマンスやクロールジョブを改善する予定で、新しい小さなテーブルが常に優れていますか? – navy1978

+1

テーブルに適切なインデックスがある場合、フィルタを適用したビューは正常に動作します。しかし、小さなテーブルはいつも非常に高速になるでしょう。しかし、あなたはこの小さなテーブルを維持するという仕事を持っています。ある日、毎日?時間?それは「時代遅れ」になり、リフレッシュする必要があります。もちろん克服できないものではありません。 –

1

MySQLビューはデータを保存しません。必要なデータのためのテーブルの表現です。同様に、「select * from tablename;」の代わりに列の名前に言及して、テーブルから選択した列を取得します。すべての列を取得します。 データを保存する必要があるcronジョブを実行する場合は、まず質問について話してください。ビューでは不可能です。だからあなたの答えは、私たちが意見にcron jobを実行することはできません。しかし、あなたはあなたのテーブルの上に特定の条件のためのイベントを作成することができます...

よろしく、 Irotiマハジャン [email protected]

+0

申し訳ありませんが、多分私はあなたを誤解しました。しかし、データはすでに格納されています。クエリに使用するテーブルやビューが小さくて済むだけです。ビューを使用してパフォーマンスを向上させることはないと思いますが、私はchronジョブと通常のテーブルを使用するための最初のアイデアに切り替える必要がありますか? – navy1978

+1

私によると、はい。小さなテーブルを維持する必要があります。私は小さなテーブルが常に速く働いている "Used_By_Already"の答えに同意します。 –

関連する問題