数据库表获取太多数据 - 需要另一种解决方案

Fre*_*xuz 3 ruby mysql database-design ruby-on-rails

我有一个网站,人们可以添加自己喜欢的电视剧.有一个功能可以检查您看过的剧集.

每个被检查的剧集在DB表中创建一个记录(使用user_id,show_id和episode_id).
这个表现在超过600.000行并且增长非常快!

我已设置索引,但我觉得查询此表时的性能越来越差.

我对新解决方案的想法:

所以代替:

user_id | show_id | episode_id  
1 ....... 123 ......7675  
1 ....... 123 ......7676   
1 ....... 123 ......7677  
1 ....... 456 ......5678  
1 ....... 456 ......5679  
1 ....... 456 ......5680  
Run Code Online (Sandbox Code Playgroud)

我能做到这一点:

user_id | show_id | episode_ids  
1 ....... 123 ......7675,7676,7677  
1 ....... 456 ......5678,5679,5680
Run Code Online (Sandbox Code Playgroud)

然后我必须将字符串拆分成一个数组,并使用array.include?(some-id).
这应该可以减轻数据库的负担,但Ruby会有更多更重的数组代码来处理.

我是在正确的轨道上吗?或者任何人都可以想到更好的解决方案?

Mar*_*rkR 13

否否,这绝对不是构建这样一个数据库的方法.varchar字段中以逗号分隔的列表是您应该考虑的最不理想的反模式.

这听起来像我的性能问题是基于猜测.所以与其:

  • 确定是否真的一个问题
  • 使用适当的仪器查找原因
  • 在非生产环境中测试可能的解决方案.

600k行没有(在一个有三个整数的表中).真.即使是最小的服务器,这也可以适用于ram.从ram中查询表应该是如此之快,你不必担心它.

如果您已经过了第1步(确实存在问题),请询问包含整个相关模式,确切查询,解释计划和时间数据的其他问题.