増田さん、こんにちは 
らっちょと申します。
私も駆け出しなのですが、普段
 CentOS5.3 & MySQL5.1.41 & PHP5.3.1
 Server cpu:Opteron1352 memory:8G
の環境で動かしております。
最大レコード数は約240万ですが、快適に作動しております。
 
さて、お問合せの件ですが
> 一ヶ月目で、130ぐらいレコード数が増えます。
> これを1000ヶ月とか10000ヶ月になった場合、膨大なレコード数になり、パフォーマンスが落ちないか心配な面があります。
ミヤタさんも仰っていますが、1000ヶ月で13万、10000ヶ月(約833年)で130万レコードと
あまり多くはないように思います。
パフォーマンスの心配はしなくても大丈夫だと思います。
(古いPCでスペックが低すぎると分かりませんが)
 
それより気になったのは、
・その月のaction回数を調べて今回可能か判断する場合
  table1)カラムを順に調べて空きがあればactionへ
  table2)その月の件数を調べて10未満ならactionへ
 が必要と思われますが、table2の方が楽だと思います。
 
・なんらかの集計をされますでしょうか
  月に10回未満が許されるのなら個人別action状況
  行為日が特定でなければ、日別のaction数 とか
 集計されるのならtable2でないと大変のような気がします。
 
以上少しでもお役に立てればと思い、レスいたします。
#MySQL(データベース)で、楽&幸になる人が増えることを願ってます
 
 
> --------------
> table1
>
> key | user_id | 1day_action1 | 2day_action1 .... 10day_action1 |
> 1day_action2 | .... 10day_action2
>
> とすべきか、
>
>
> table2
>
> key | user_id | action | day
>
> とすべきかで迷っております。
>
> table1であれば、一度user_idなどをINSERTしてしまえば、action部分をUPDATEするだけ(NOT
> NULL制約有)なので、フィールドもそこまで増えず、ある意味見やすいです。
> ただし、アクションを2つ行えるのは3名しかいないため、残り7名にとっては無駄なフィールドがあって、
> あまり効率よくない感じがします。
>
> table2だと、フィールドも少なく、actionの内容とその行為日だけを入れればよいので、
> 楽なのですが、INSERTが多くなり、レコード数も必然と増えます。
>
> ただし、フィールドに無駄はありませんし、WHERE 句を使えばデータは取ってこれるので、
> 1レコードとしては見にくいですが、データを素早く取ってこれることが大事なので、
> こちらのほうがよいのかなと思っています。
>
> ---
>
> ただし、行為の対象として、targetフィールドを設けなければならなくなったり、
> 10日間を複数回繰り返すことができるようになり、1ヶ月目(10日間)、2ヶ月目(10日間)というように
> 増えて言った場合、table2だと、
>
> key | month | user_id | action | target | day
> となり、1monthで1user、10action(3人は20action)ですので、
> 一ヶ月目で、130ぐらいレコード数が増えます。
>
> これを1000ヶ月とか10000ヶ月になった場合、膨大なレコード数になり、パフォーマンスが落ちないか心配な面があります。
>
> table1だと、
>
>
> key | month | user_id | 1day_action1 | 2day_action1 .. .. 10day_action1
> | 1day_action2 | .... 10day_action2
> target
> として、アクションフィールドのデータにその行為のターゲットを入れればデータは取れるので、
> レコード数もあまり増えず、無駄なフィールドはあるものの、こちらのほうがよいのだろうかとも思ってしまいます。
>
>
> この場合、どちらのほうがパフォーマンスとして望ましいのでしょうか?
> データが多くなれば検証もできるのですが、現在データが少なく、比較できるほど大きなデータも持っていないため、もし何か分かりましたらご教授いただけると嬉しく思います。
>
>
>
> 増田
> --
> mailto:masuken@gmail.com


USBメモリ代わりにお使いください。無料で使える25GB。 SkyDriveを今すぐ体験