我有一張大桌子(約10米行,目前所有的假測試數據)。MySQL搜索單個和多個子查詢
id用戶和操作都不是唯一的,但用戶只能執行一次操作。 (這意味着有隻會永遠是id_user和id_action的一個組合
x和y都只會是1的INT - 100
我索引的每列
CREATE TABLE IF NOT EXISTS `test` (
`id_user` int(11) NOT NULL,
`id_action` int(11) NOT NULL,
`x` int(11) NOT NULL,
`y` int(11) NOT NULL,
KEY `x` (`x`),
KEY `y` (`y`),
KEY `id_user` (`id_user`),
KEY `id_action` (`id_action`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
它是一個遊戲,我試圖建立。
我想要做的就是在表格中搜索具有x的得分相近的其他用戶,由Y規定的範圍內。
例如,如果用戶1執行操作1,x的分數爲75,y的範圍爲10。我想要顯示所有其他從65-85得分的用戶(因爲範圍在y中爲10)。
這是我有,我只是跑在我的本地筆記本電腦..它後經過300秒超時... :(
SELECT * FROM test
WHERE
id_user != 1 AND
x BETWEEN
((SELECT x from test WHERE id_action = 1 AND id_user = 1) - (100 - (SELECT y FROM test WHERE id_action = 1 And id_user = 1)))
AND
((SELECT x from test WHERE id_action = 1 AND id_user = 1) + (100 - (SELECT y FROM test WHERE id_action = 1 And id_user = 1)));
的10,000,000行我有這樣的搜索(100行動與100,000測試用戶..所有隨機數)只是失敗
我要調查加入表本身現在,但我認爲一個子選擇會更有效率。去這裏...任何意見將不勝感激... :)
現在我想到了,我很困惑te 100 - 我現在正在運行你的想法。 ..神的思考方式... – Beertastic
嗨,我的答案是否解決您的問題? – DavidLin
ABD是非常有幫助的。可悲的是項目改變了,這個問題是不相關了..但這不是重點..所以..所以是的,這是有益的..抱歉離開它掛..更新吧! – Beertastic