sql查询多个内连接。 “复制到Tmp表”需要太长时间

时间:2017-04-10 19:58:14

标签: mysql

这是我的表“用户”:

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表”

还有其他方法可以让它更快吗?

1 个答案:

答案 0 :(得分:0)

我发现“ORDER BY”让它极其缓慢......