2010-08-04 70 views
0

我正在研究一个带有“大”表和性能(对于SELECT)的过滤部分,这是非常值得关注的。使用3个Big表格从MySQL中过滤高效(PHP?)

TABLE_1有71万条记录,看起来像这样:

(PK) game_id 
param_1 
param_2 
param_3 

TABLE_2有42218503条记录,看起来像这样:

(PK) set_id 
value_1 
value_2  

TABLE_3有56312204条记录,看起来像这样:

(PK) relation_id 
game_id 
set_id 
box_1 
box_2 

插入不常见(每周一次),但选择是(很多,每天)。
3类型的搜索是常见的:

  1. 通过TABLE_1只(使用PARAM_1,PARAM_2,param_3)
  2. 通过TABLE_3只,提供值_1来搜索
  3. A的两个
组合

每个搜索最多只会返回20个游戏,我关心的是3d情况,他们在table_1和table_2中搜索param_1,param_2和value_1,value_2。我不想使用SELECT ... JOIN,因为时间表的大小(在3个表格数据超过10 GB之间)。我也可以将内容缓存(因为它永远不会改变)到PHP的平面文件。

我一直在考虑该例程如下:

步骤1:选择SET_ID

步骤2:选择从TABLE_3所有game_id WHERE SET_ID =来自步骤1

SETP 3值:为table_1构建SELECT WHERE game_id =来自步骤2的值

想法或对此方法的评论?

(我不是一个专用的服务器-yet-和表是在3D范式上)

+2

你有没有试过让数据库做到这一点?它太慢了吗?数据库倾向于包含一些优化,对于像php这样的互相渗透的语言来说很难匹配。 – 2010-08-04 13:22:56

+0

感觉就像我刚被拍打一样,运行了一个测试查询,尽管只使用了3个过滤器(table_2.value_1,table_1.param_1和table_1.param_2),查询只花了0.0001秒!这是本地主机,但即使查询需要25倍以上,它仍然是一个体面的。猜猜它的真正价值现在就生活:) (傻我...) – Purefan 2010-08-04 14:03:08

+0

索引是一个了不起的事情! – 2010-08-04 15:42:29

回答

1

只写SQL作为设计表中加入星展银行往往会包含一些优化,而这是很难用于像php这样的互相渗透的语言来匹配。

如果您的查询运行缓慢,请查看您的WHERE并确保使用索引。如果它仍然很慢看看连接....从那里你可以问一个更具体的调整问题。

+0

谢谢你的一切:) – Purefan 2015-04-27 14:39:46