2010-08-04 62 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