这是我的表“用户”:
id(auto_increment,primary_key),userid(唯一),key(唯一),value
第一个索引: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表”
还有其他方法可以让它更快吗?
答案 0 :(得分:0)
我发现“ORDER BY”让它极其缓慢......