这是我的桌子“用户”:
id(auto_increment,primary_key),用户标识(唯一),键(唯一),值
第一个索引: id
第二个索引: userid + key
示例行:
1,1,“汽车”,“红色快速昂贵”
2,1,“房子”,“两层花园漂亮”
3,1,“智能手机”,“带相机和mp3”
4,2,“汽车”,“红色快速昂贵”
5,2,“房子”,“两层花园漂亮”
6,2,“智能手机”,“带相机和mp3”
7,3,“汽车”,“红色快速昂贵”
8,3,“房子”,“两层花园漂亮”
9,3,“智能手机”,“带相机和mp3”
现在我想找到所有拥有所有这些键值对的用户。。
这是我的疑问:
SELECT kv1.val AS val1, kv2.val AS val2, kv3.val AS val3
FROM user AS kv1
INNER JOIN user AS kv2 ON kv2.userid = user.userid
INNER JOIN user AS kv3 ON kv3.userid = user.userid
WHERE (
( kv1.key = 'car' && kv1.val LIKE '%expensive%') &&
( kv2.key = 'house' kv2.val LIKE '%beautiful%') &&
( kv3.key = 'smartphone' && kv3.val LIKE '%camera%')
)效果很好。但我的问题是:一个包含1000万行到4.7秒的测试查询。phpmysql表示,98,91%的时间用于“复制到Tmp表”。
还有别的办法让它更快吗?
发布于 2017-04-10 22:45:35
我发现“按顺序”会让事情变得极端缓慢.
https://stackoverflow.com/questions/43331962
复制相似问题