MySQL搜索单个和多个子选择
我有一个很大的表(大约10万行,目前所有的测试数据都是假的) 用户id和操作都不是唯一的,但用户只能执行一次操作。 (意味着只有一个id_用户和id_操作的组合 x和y都是1-100的整数 我为每一列都编了索引MySQL搜索单个和多个子选择,mysql,search,join,indexing,int,Mysql,Search,Join,Indexing,Int,我有一个很大的表(大约10万行,目前所有的测试数据都是假的) 用户id和操作都不是唯一的,但用户只能执行一次操作。 (意味着只有一个id_用户和id_操作的组合 x和y都是1-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
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秒后超时…:(
我对10000000行的搜索(100个操作,100000个测试用户..所有随机数)失败了
我现在要研究将表加入到自身中,但我认为子选择会更有效。我在这里学习…任何建议都将不胜感激…:)将其分为两个查询更容易,一个用于获取x的范围,另一个用于实际检索 如果您真的希望只在一个查询中执行此操作,可以尝试以下方法
Select t0.* from test t0, test t1 where t1.id_user=1 AND t0.id_user !=1
AND abs(t1.x-t0.x) <= t1.y
从测试t0中选择t0.*测试t1,其中t1.id\u user=1和t0.id\u user!=1
和abs(t1.x-t0.x)现在我想起来了,我也被te 100搞糊涂了!我现在正在运行你的想法…上帝的想法…ABD真的很有帮助。遗憾的是项目改变了,这个问题不再相关了…但这不是重点…所以是的,它很有帮助…抱歉让它挂起…现在更新!
Select t0.* from test t0, test t1 where t1.id_user=1 AND t0.id_user !=1
AND abs(t1.x-t0.x) <= t1.y