Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 哪一个性能更好?交叉连接还是新表?_Mysql_Performance_Join - Fatal编程技术网

Mysql 哪一个性能更好?交叉连接还是新表?

Mysql 哪一个性能更好?交叉连接还是新表?,mysql,performance,join,Mysql,Performance,Join,我正在构建一个face match web应用程序 注意:我刚刚发现人们不会将这种类型的应用程序称为facematch应用程序 这是一个基本的工作流程 用户上传照片 管理员批准/拒绝照片 当用户访问该页面时,会从数据库中随机选择两张照片 用户有两个选择 选择一张照片 跳到另一场比赛 有一个条件。用户看不到重复的匹配项。如果用户已经玩过1对2,则用户不会再次看到2对1 假设我有以下4张照片 桌面照片 id 1 2 3 4 身份证件 1. 2. 3. 4. 有6种可能的匹配。那些是 1 vs 2

我正在构建一个face match web应用程序

注意:我刚刚发现人们不会将这种类型的应用程序称为facematch应用程序

这是一个基本的工作流程

  • 用户上传照片
  • 管理员批准/拒绝照片
  • 当用户访问该页面时,会从数据库中随机选择两张照片
  • 用户有两个选择
  • 选择一张照片
  • 跳到另一场比赛
  • 有一个条件。用户看不到重复的匹配项。如果用户已经玩过1对2,则用户不会再次看到2对1

    假设我有以下4张照片

    桌面照片

    id 1 2 3 4 身份证件 1. 2. 3. 4. 有6种可能的匹配。那些是

    1 vs 2 1 vs 3 1 vs 4 2 vs 3 2 vs 4 3 vs 4 1对2 1对3 1对4 2对3 2对4 3对4 为了进行这些匹配,我使用以下交叉连接查询

    select p1.id, p2.id from photos as p1 cross join photos as p2 where p1.id < p2.id
    
    从照片中选择p1.id,p2.id作为p1交叉连接照片作为p2,其中p1.id
    它毫无问题地工作。我担心的是,随着比赛数量的增加,速度会变慢

    我只拍了2000张照片,就得到了1999000场比赛。这是一个巨大的数字

    因此,我考虑了一个解决方案,并想出了创建一个新表来存储所有可能的匹配项。这些行是在管理员批准照片时创建的

    表格匹配

    id1 id2 1 2 1 3 1 4 and so on id1 id2 1 2 1 3 1 4 等等 最后,我的问题是

    我应该继续使用交叉联接还是创建一个新表“matches”

    哪一个更好


    任何其他更好的解决方案都将不胜感激

    我认为在这种情况下,最好不要存储所有匹配项。如您所知,匹配的数量是行数的二次方。根据您的用例,似乎最好保留一个包含每个用户所有可见对的表,并在查询该用户时将其排除。与整个组合空间相比,这可能是非常稀疏的。除非您需要在管理员批准时存储所有组合的数据,否则没有理由在那时生成它们

    //谢谢你的答复。我担心的是…有很多并发连接的地方可能会很慢…比如说50000。我的MYSQL可以接受这个交叉连接查询吗?