Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 使用来自大型select的数据执行大插入_Mysql_Join_Database Performance - Fatal编程技术网

Mysql 使用来自大型select的数据执行大插入

Mysql 使用来自大型select的数据执行大插入,mysql,join,database-performance,Mysql,Join,Database Performance,我们正在为一家商店生成一些交叉销售数据。我们想展示“看过这个产品的客户,也看过这些产品”之类的东西。 为了生成这些数据,我们每天从基于会话的产品查看数据中进行查询 INSERT INTO product_viewed_together ( product, product_associate, viewed

我们正在为一家商店生成一些交叉销售数据。我们想展示“看过这个产品的客户,也看过这些产品”之类的东西。 为了生成这些数据,我们每天从基于会话的产品查看数据中进行查询

            INSERT INTO
                product_viewed_together
            (
                product,
                product_associate,
                viewed
            )
            SELECT
                v.product,
                v2.product,
                COUNT(*)
            FROM
                product_view v
            INNER JOIN
                product_view v2
            ON
                v2.session = v.session
                AND v2.product != v.product
                AND DATE_ADD(v2.created, INTERVAL %d DAY) > NOW()
            WHERE
                DATE_ADD(v.created, INTERVAL %d DAY) > NOW()
            GROUP BY
                v.product,
                v2.product;
产品视图
已连接到自身。由于该表相当大(约2600万行),因此结果更大。查询会产生大量的性能和时间


我没有用,我们选择了一个布局适合的问题在一个好的方式。有没有更好的方法来存储和生成这些数据

进行日期测试sargable

DATE_ADD(v.created, INTERVAL %d DAY) > NOW()
-->

产品视图
a
视图
?或
表格
?如果是,请提供两个“覆盖”索引:

也许你得到的所有计数都是甚至?这个错误可以用3种方法修复,每种方法都会使速度加倍。我认为最好的办法是将上的
中的一行更改为

DATE_ADD(v2.created, INTERVAL %d DAY) > NOW()
-->

我想那会使速度加倍

但是,如果可以使用相同的
创建两个不同的产品,则计数可能不完全正确

另一个问题:你将以

prod  assoc  CT
123   234    43
234   123    76  -- same pair, opposite order
我修改后的测试结果显示234比123来得更频繁

试试那些东西。但如果你还需要更多;我还有一个更具侵略性的想法

DATE_ADD(v2.created, INTERVAL %d DAY) > NOW()
v2.created > v.created
prod  assoc  CT
123   234    43
234   123    76  -- same pair, opposite order