私のmysqlデータベーステーブルでいくつかの問題が発生しました。私はdate_insertedを含む5分、10分ごとに200行を挿入するスクリプトがあり、いくつかの結合(4つの結合など)に基づいて挿入された最後のレコードを示すクエリがあります。表には、このようなものです:mysql大きなテーブルを構成する
table :
id, location, int_id, in, out, steps, date_added
と私はこの
...
join (
select a.location, a.int_id, a.in, a.out, a .date_added
from table a
join (
select location, int_id, max(date_added) as `date_added`
from table
group by location, int_id
) b on b.location = a.location
and b.int_id = a.int_id
and b.date_added = a.date_added
) c on c.location like concat('%', b.location_name, '%')
and c.int_id = b.interface_id
...
と、このテーブルがあまりにも10 milionを育つなどのように参加してきた、100 milionクエリが遅い実行されます記録します遅いです。
このテーブルのサイズを小さくする最適な方法は何ですか?私はパーティションを読んだが、もしそれがわからないなら、私のための最善の解決策だ?または?
毎月新しいデータベースまたはテーブルを作成することはありますか?
私は、100万のレコードを増やしてテーブルに加わることをやめたくありません。
大変ありがとうございますが、私はこれをどのようにスケールアップするかを理解できません。
UPDATE 1
id : int primary key auto_increment , location varchar, int_id int, in bigint, out bigint, steps varchar, date_added timestamp
私は5分ごとに場所がインタフェースIDと内と外(そのalwas増加のためのいくつかのBIGINTカウンターに名前を付けるが、私はそれをリセットすることができ、データベースに保存したログサーバーを持っています)の挿入日が正しい。 最新の日付にこのカウンタを表示するためにリアルタイムでレポートを行っています(グループをリセットする場合は0から開始し、グループの場合は最大値を使用できません)
問題は次のとおりです。半年ほどのこのテーブルは、このリアルタイムレポートがテーブルの行数の影響を受けるほど大きくなります。レポートのスピードが制限されたテーブルを維持するために、それらを分割する最善の方法は何ですか。私は日/週/月の詳細なレポートを作成するので、古いカウンターを削除したくないのですが、1つのテーブルに100万のレコードを保存したくありません。私は毎月のデータベースを作成し、1ヶ月間レコードをデータベース2016_04_report、2016_05_reportなどに挿入することを考えていました。
最後の挿入タイムスタンプであればキャッシュテーブルを保存してそこにタイムスタンプを保存してください。 – ash
キャッシュテーブル?どうやって ?私はそれぞれのカウンター(インとアウト)が必要なので、私はそれらをリセットすることができますので、私はその場所の最後の挿入時に0を必要とするので、inferface_id – 123onetwothree
あなたはあなたが何であるかを説明すれば達成しようとしているデータ、格納しているデータ、その理由は何ですか?その後、分かりにくいので、私たちはあなたを助けようとします。また、解決したことが分かっていれば、より簡単な解決策が存在する可能性があります。 – ash