我正在研究一個帶有「大」表和性能(對於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類型的搜索是常見的:
- 通過TABLE_1只(使用PARAM_1,PARAM_2,param_3)
- 通過TABLE_3只,提供值_1來搜索
- 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範式上)
你有沒有試過讓數據庫做到這一點?它太慢了嗎?數據庫傾向於包含一些優化,對於像php這樣的互相滲透的語言來說很難匹配。 – 2010-08-04 13:22:56
感覺就像我剛被拍打一樣,運行了一個測試查詢,儘管只使用了3個過濾器(table_2.value_1,table_1.param_1和table_1.param_2),查詢只花了0.0001秒!這是本地主機,但即使查詢需要25倍以上,它仍然是一個體面的。猜猜它的真正價值現在就生活:) (傻我...) – Purefan 2010-08-04 14:03:08
索引是一個了不起的事情! – 2010-08-04 15:42:29