Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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 - Fatal编程技术网

Mysql 同一查询多个变量的方式不同,结果速度也不同

Mysql 同一查询多个变量的方式不同,结果速度也不同,mysql,Mysql,我试图理解为什么在更改变量大小时查询失败 此查询在不到一秒钟的时间内运行: SELECT s1.biz_name,s1.biz_info,s1.e_address,s1.e_city,s1.e_state,s1.e_postal,s1.e_zip_full,s1.loc_lat_centroid,s1.loc_long_centroid,s1.biz_phone,s1.biz_phone_ext,s1.biz_fax,s1.biz_email,s1.web_url,s2.upc AS upc2

我试图理解为什么在更改变量大小时查询失败

此查询在不到一秒钟的时间内运行:

SELECT 
s1.biz_name,s1.biz_info,s1.e_address,s1.e_city,s1.e_state,s1.e_postal,s1.e_zip_full,s1.loc_lat_centroid,s1.loc_long_centroid,s1.biz_phone,s1.biz_phone_ext,s1.biz_fax,s1.biz_email,s1.web_url,s2.upc AS upc2,s2.retailprice AS
retailprice2,s2.dollar_sales AS dollar_sales2, 
s2.dollar_sales_ly AS dollar_sales_ly2, 
s2.todaydate AS todaydate2,s2.datetimesql AS datetimesql2, 
s2.shelfposition AS shelfposition2,s2.reg_sale AS reg_sale2, 
s2.representative AS representative2,s2.notes AS notes2,s3.upc AS 
upc3,s3.retailprice AS retailprice3,s3.dollar_sales AS dollar_sales3, 
s3.dollar_sales_ly AS dollar_sales_ly3,s3.todaydate AS todaydate3, 
s3.datetimesql AS datetimesql3,s3.shelfposition AS shelfposition3, 
s3.reg_sale AS reg_sale3,s3.representative AS representative3,s3.notes AS notes3 
,s4.upc AS upc4,s4.retailprice AS retailprice4,s4.dollar_sales AS dollar_sales4, 
s4.dollar_sales_ly AS dollar_sales_ly4,s4.todaydate AS todaydate4, 
s4.datetimesql AS datetimesql4,s4.shelfposition AS shelfposition4, 
s4.reg_sale AS reg_sale4,s4.representative AS representative4,s4.notes AS notes4 
,s5.upc AS upc5,s5.retailprice AS retailprice5,s5.dollar_sales AS dollar_sales5, 
s5.dollar_sales_ly AS dollar_sales_ly5,s5.todaydate AS todaydate5, 
s5.datetimesql AS datetimesql5,s5.shelfposition AS shelfposition5, 
s5.reg_sale AS reg_sale5,s5.representative AS representative5,s5.notes AS notes5 
FROM   allstores AS s1 
       LEFT OUTER JOIN storecheckrecords AS s2 
         ON s1.e_address = s2.e_address 
            AND s2.upc = '650637119004' 
       LEFT OUTER JOIN storecheckrecords AS s3 
         ON s1.e_address = s3.e_address 
            AND s3.upc = '650637119011' 
       LEFT OUTER JOIN storecheckrecords AS s4 
         ON s1.e_address = s4.e_address 
            AND s4.upc = '650637374007' 
       LEFT OUTER JOIN storecheckrecords AS s5 
         ON s1.e_address = s5.e_address 
            AND s5.upc = '650637374014' 
WHERE  s2.e_address IS NOT NULL 
        OR s3.e_address IS NOT NULL 
        OR s4.e_address IS NOT NULL 
        OR s5.e_address IS NOT NULL 
此查询永远不会完成:

SELECT 
s1.biz_name,s1.biz_info,s1.e_address,s1.e_city,s1.e_state,s1.e_postal,s1.e_zip_full,s1.loc_lat_centroid,s1.loc_long_centroid,s1.biz_phone,s1.biz_phone_ext,s1.biz_fax,s1.biz_email,s1.web_url,s2.upc AS upc2,s2.retailprice AS
retailprice2,s2.dollar_sales AS dollar_sales2, 
s2.dollar_sales_ly AS dollar_sales_ly2, 
s2.todaydate AS todaydate2,s2.datetimesql AS datetimesql2, 
s2.shelfposition AS shelfposition2,s2.reg_sale AS reg_sale2, 
s2.representative AS representative2,s2.notes AS notes2,s3.upc AS 
upc3,s3.retailprice AS retailprice3,s3.dollar_sales AS dollar_sales3, 
s3.dollar_sales_ly AS dollar_sales_ly3,s3.todaydate AS todaydate3, 
s3.datetimesql AS datetimesql3,s3.shelfposition AS shelfposition3, 
s3.reg_sale AS reg_sale3,s3.representative AS representative3,s3.notes AS notes3 
,s4.upc AS upc4,s4.retailprice AS retailprice4,s4.dollar_sales AS dollar_sales4, 
s4.dollar_sales_ly AS dollar_sales_ly4,s4.todaydate AS todaydate4, 
s4.datetimesql AS datetimesql4,s4.shelfposition AS shelfposition4, 
s4.reg_sale AS reg_sale4,s4.representative AS representative4,s4.notes AS notes4 
,s5.upc AS upc5,s5.retailprice AS retailprice5,s5.dollar_sales AS dollar_sales5, 
s5.dollar_sales_ly AS dollar_sales_ly5,s5.todaydate AS todaydate5, 
s5.datetimesql AS datetimesql5,s5.shelfposition AS shelfposition5, 
s5.reg_sale AS reg_sale5,s5.representative AS representative5,s5.notes AS notes5 
,s6.upc AS upc6,s6.retailprice AS retailprice6,s6.dollar_sales AS dollar_sales6, 
s6.dollar_sales_ly AS dollar_sales_ly6,s6.todaydate AS todaydate6, 
s6.datetimesql AS datetimesql6,s6.shelfposition AS shelfposition6, 
s6.reg_sale AS reg_sale6,s6.representative AS representative6,s6.notes AS notes6 
,s7.upc AS upc7,s7.retailprice AS retailprice7,s7.dollar_sales AS dollar_sales7, 
s7.dollar_sales_ly AS dollar_sales_ly7,s7.todaydate AS todaydate7, 
s7.datetimesql AS datetimesql7,s7.shelfposition AS shelfposition7, 
s7.reg_sale AS reg_sale7,s7.representative AS representative7,s7.notes AS notes7 
,s8.upc AS upc8,s8.retailprice AS retailprice8,s8.dollar_sales AS dollar_sales8, 
s8.dollar_sales_ly AS dollar_sales_ly8,s8.todaydate AS todaydate8, 
s8.datetimesql AS datetimesql8,s8.shelfposition AS shelfposition8, 
s8.reg_sale AS reg_sale8,s8.representative AS representative8,s8.notes AS notes8 
,s9.upc AS upc9,s9.retailprice AS retailprice9,s9.dollar_sales AS dollar_sales9, 
s9.dollar_sales_ly AS dollar_sales_ly9,s9.todaydate AS todaydate9, 
s9.datetimesql AS datetimesql9,s9.shelfposition AS shelfposition9, 
s9.reg_sale AS reg_sale9,s9.representative AS representative9,s9.notes AS notes9 
,s10.upc AS upc10,s10.retailprice AS retailprice10, 
s10.dollar_sales AS dollar_sales10,s10.dollar_sales_ly AS 
dollar_sales_ly10,s10.todaydate AS todaydate10,s10.datetimesql AS 
datetimesql10,s10.shelfposition AS shelfposition10,s10.reg_sale AS reg_sale10, 
s10.representative AS representative10,s10.notes AS notes10,s11.upc AS 
upc11,s11.retailprice AS retailprice11,s11.dollar_sales AS dollar_sales11, 
s11.dollar_sales_ly AS dollar_sales_ly11,s11.todaydate AS 
todaydate11,s11.datetimesql AS datetimesql11, 
s11.shelfposition AS shelfposition11, 
s11.reg_sale AS reg_sale11,s11.representative AS representative11, 
s11.notes AS notes11,s12.upc AS upc12,s12.retailprice AS 
retailprice12,s12.dollar_sales AS dollar_sales12,s12.dollar_sales_ly AS 
dollar_sales_ly12,s12.todaydate AS todaydate12,s12.datetimesql AS 
datetimesql12,s12.shelfposition AS shelfposition12,s12.reg_sale AS reg_sale12, 
s12.representative AS representative12,s12.notes AS notes12,s13.upc AS 
upc13,s13.retailprice AS retailprice13,s13.dollar_sales AS dollar_sales13, 
s13.dollar_sales_ly AS dollar_sales_ly13,s13.todaydate AS 
todaydate13,s13.datetimesql AS datetimesql13, 
s13.shelfposition AS shelfposition13, 
s13.reg_sale AS reg_sale13,s13.representative AS representative13, 
s13.notes AS notes13,s14.upc AS upc14,s14.retailprice AS 
retailprice14,s14.dollar_sales AS dollar_sales14,s14.dollar_sales_ly AS 
dollar_sales_ly14,s14.todaydate AS todaydate14,s14.datetimesql AS 
datetimesql14,s14.shelfposition AS shelfposition14,s14.reg_sale AS reg_sale14, 
s14.representative AS representative14,s14.notes AS notes14,s15.upc AS 
upc15,s15.retailprice AS retailprice15,s15.dollar_sales AS dollar_sales15, 
s15.dollar_sales_ly AS dollar_sales_ly15,s15.todaydate AS 
todaydate15,s15.datetimesql AS datetimesql15, 
s15.shelfposition AS shelfposition15, 
s15.reg_sale AS reg_sale15,s15.representative AS representative15, 
s15.notes AS notes15,s16.upc AS upc16,s16.retailprice AS 
retailprice16,s16.dollar_sales AS dollar_sales16,s16.dollar_sales_ly AS 
dollar_sales_ly16,s16.todaydate AS todaydate16,s16.datetimesql AS 
datetimesql16,s16.shelfposition AS shelfposition16,s16.reg_sale AS reg_sale16, 
s16.representative AS representative16,s16.notes AS notes16,s17.upc AS 
upc17,s17.retailprice AS retailprice17,s17.dollar_sales AS dollar_sales17, 
s17.dollar_sales_ly AS dollar_sales_ly17,s17.todaydate AS 
todaydate17,s17.datetimesql AS datetimesql17, 
s17.shelfposition AS shelfposition17, 
s17.reg_sale AS reg_sale17,s17.representative AS representative17, 
s17.notes AS notes17 
FROM   allstores AS s1 
       LEFT OUTER JOIN storecheckrecords AS s2 
         ON s1.e_address = s2.e_address 
            AND s2.upc = '075172039394' 
       LEFT OUTER JOIN storecheckrecords AS s3 
         ON s1.e_address = s3.e_address 
            AND s3.upc = '075172071622' 
       LEFT OUTER JOIN storecheckrecords AS s4 
         ON s1.e_address = s4.e_address 
            AND s4.upc = '075172071639' 
       LEFT OUTER JOIN storecheckrecords AS s5 
         ON s1.e_address = s5.e_address 
            AND s5.upc = '075172071677' 
       LEFT OUTER JOIN storecheckrecords AS s6 
         ON s1.e_address = s6.e_address 
            AND s6.upc = '075172071684' 
       LEFT OUTER JOIN storecheckrecords AS s7 
         ON s1.e_address = s7.e_address 
            AND s7.upc = '075172071691' 
       LEFT OUTER JOIN storecheckrecords AS s8 
         ON s1.e_address = s8.e_address 
            AND s8.upc = '075172079130' 
       LEFT OUTER JOIN storecheckrecords AS s9 
         ON s1.e_address = s9.e_address 
            AND s9.upc = '075172079147' 
       LEFT OUTER JOIN storecheckrecords AS s10 
         ON s1.e_address = s10.e_address 
            AND s10.upc = '075172079154' 
       LEFT OUTER JOIN storecheckrecords AS s11 
         ON s1.e_address = s11.e_address 
            AND s11.upc = '075172079307' 
       LEFT OUTER JOIN storecheckrecords AS s12 
         ON s1.e_address = s12.e_address 
            AND s12.upc = '075172079369' 
       LEFT OUTER JOIN storecheckrecords AS s13 
         ON s1.e_address = s13.e_address 
            AND s13.upc = '075172079468' 
       LEFT OUTER JOIN storecheckrecords AS s14 
         ON s1.e_address = s14.e_address 
            AND s14.upc = '075172079604' 
       LEFT OUTER JOIN storecheckrecords AS s15 
         ON s1.e_address = s15.e_address 
            AND s15.upc = '075172079618' 
       LEFT OUTER JOIN storecheckrecords AS s16 
         ON s1.e_address = s16.e_address 
            AND s16.upc = '075172079659' 
       LEFT OUTER JOIN storecheckrecords AS s17 
         ON s1.e_address = s17.e_address 
            AND s17.upc = '075172079697' 
WHERE  s2.e_address IS NOT NULL 
        OR s3.e_address IS NOT NULL 
        OR s4.e_address IS NOT NULL 
        OR s5.e_address IS NOT NULL 
        OR s6.e_address IS NOT NULL 
        OR s7.e_address IS NOT NULL 
        OR s8.e_address IS NOT NULL 
        OR s9.e_address IS NOT NULL 
        OR s10.e_address IS NOT NULL 
        OR s11.e_address IS NOT NULL 
        OR s12.e_address IS NOT NULL 
        OR s13.e_address IS NOT NULL 
        OR s14.e_address IS NOT NULL 
        OR s15.e_address IS NOT NULL 
        OR s16.e_address IS NOT NULL 
        OR s17.e_address IS NOT NULL 
e_地址已编入索引


有人能解释一下可能的问题吗?谢谢您的帮助。

让我为您稍微重新格式化一下,使问题变得更加明显:

....
FROM allStores AS s1
LEFT OUTER JOIN storeCheckRecords AS s2 ON s1.e_address = s2.e_address AND s2.upc = '075172039394'
LEFT OUTER JOIN storeCheckRecords AS s3 ON s1.e_address = s3.e_address AND s3.upc = '075172071622'
LEFT OUTER JOIN storeCheckRecords AS s4 ON s1.e_address = s4.e_address AND s4.upc = '075172071639'
LEFT OUTER JOIN storeCheckRecords AS s5 ON s1.e_address = s5.e_address AND s5.upc = '075172071677'
LEFT OUTER JOIN storeCheckRecords AS s6 ON s1.e_address = s6.e_address AND s6.upc = '075172071684'
LEFT OUTER JOIN storeCheckRecords AS s7 ON s1.e_address = s7.e_address AND s7.upc = '075172071691'
LEFT OUTER JOIN storeCheckRecords AS s8 ON s1.e_address = s8.e_address AND s8.upc = '075172079130'
LEFT OUTER JOIN storeCheckRecords AS s9 ON s1.e_address = s9.e_address AND s9.upc = '075172079147'
LEFT OUTER JOIN storeCheckRecords AS s10 ON s1.e_address = s10.e_address AND s10.upc = '075172079154'
LEFT OUTER JOIN storeCheckRecords AS s11 ON s1.e_address = s11.e_address AND s11.upc = '075172079307'
LEFT OUTER JOIN storeCheckRecords AS s12 ON s1.e_address = s12.e_address AND s12.upc = '075172079369'
LEFT OUTER JOIN storeCheckRecords AS s13 ON s1.e_address = s13.e_address AND s13.upc = '075172079468' 
etc...
天哪!这是一个很大的加入!当您添加更多“变量”时,运行速度会越来越慢,这并不奇怪。添加到查询中的每个UPC都需要再加入一次

我想你只需要在表达式中加入一个
。试着这样做:

SELECT
    s1.biz_name,
    s1.biz_info,
    s1.e_address,
    -- etc..
    s2.reg_sale, 
    s2.representative,
    s2.notes
FROM allStores AS s1
JOIN storeCheckRecords AS s2
ON s1.e_address = s2.e_address
WHERE s2.upc IN ('075172039394', '075172071622', ....)

这将以稍微不同的“形状”返回结果,因此您还需要对客户端代码进行一些更改。

让我稍微重新格式化一下,使问题更加明显:

....
FROM allStores AS s1
LEFT OUTER JOIN storeCheckRecords AS s2 ON s1.e_address = s2.e_address AND s2.upc = '075172039394'
LEFT OUTER JOIN storeCheckRecords AS s3 ON s1.e_address = s3.e_address AND s3.upc = '075172071622'
LEFT OUTER JOIN storeCheckRecords AS s4 ON s1.e_address = s4.e_address AND s4.upc = '075172071639'
LEFT OUTER JOIN storeCheckRecords AS s5 ON s1.e_address = s5.e_address AND s5.upc = '075172071677'
LEFT OUTER JOIN storeCheckRecords AS s6 ON s1.e_address = s6.e_address AND s6.upc = '075172071684'
LEFT OUTER JOIN storeCheckRecords AS s7 ON s1.e_address = s7.e_address AND s7.upc = '075172071691'
LEFT OUTER JOIN storeCheckRecords AS s8 ON s1.e_address = s8.e_address AND s8.upc = '075172079130'
LEFT OUTER JOIN storeCheckRecords AS s9 ON s1.e_address = s9.e_address AND s9.upc = '075172079147'
LEFT OUTER JOIN storeCheckRecords AS s10 ON s1.e_address = s10.e_address AND s10.upc = '075172079154'
LEFT OUTER JOIN storeCheckRecords AS s11 ON s1.e_address = s11.e_address AND s11.upc = '075172079307'
LEFT OUTER JOIN storeCheckRecords AS s12 ON s1.e_address = s12.e_address AND s12.upc = '075172079369'
LEFT OUTER JOIN storeCheckRecords AS s13 ON s1.e_address = s13.e_address AND s13.upc = '075172079468' 
etc...
天哪!这是一个很大的加入!当您添加更多“变量”时,运行速度会越来越慢,这并不奇怪。添加到查询中的每个UPC都需要再加入一次

我想你只需要在
表达式中加入一个
。试着这样做:

SELECT
    s1.biz_name,
    s1.biz_info,
    s1.e_address,
    -- etc..
    s2.reg_sale, 
    s2.representative,
    s2.notes
FROM allStores AS s1
JOIN storeCheckRecords AS s2
ON s1.e_address = s2.e_address
WHERE s2.upc IN ('075172039394', '075172071622', ....)


这将以稍微不同的“形状”返回结果,因此您还需要对客户端代码进行一些更改。

请编辑您的问题并添加一些换行符。您可以突出显示整个内容,然后按ctl-k将其作为代码块重新嵌入。我们其他人可以编辑,但老实说,这实在是太多的工作了。你能在问题中设置你的查询格式,使它们不都是一行长的,并且实际上是可读的吗?也许如果你编辑问题,以便更容易看到查询之间的差异,更多可能会有所帮助。目前它们都是一条很长的线,不容易阅读。@MrE哦……我以为你是用“手”格式化的:PDo你在
upc
上有索引吗?或
(upc,e_地址)
上的复合索引?请编辑您的问题并添加一些换行符。您可以突出显示整个内容,然后按ctl-k将其作为代码块重新嵌入。我们其他人可以编辑,但老实说,这实在是太多的工作了。你能在问题中设置你的查询格式,使它们不都是一行长的,并且实际上是可读的吗?也许如果你编辑问题,以便更容易看到查询之间的差异,更多可能会有所帮助。目前它们都是一条很长的线,不容易阅读。@MrE哦……我以为你是用“手”格式化的:PDo你在
upc
上有索引吗?或者
(upc,e_地址)
上的复合索引?我不能使用IN语句,因为我还有一个导出(csv)功能,需要水平列出每个upc的结果。我不想只确定哪些存储包含任何upc,还想确定该存储中有哪些upc?@user1184169:结果是水平输出还是垂直输出不应影响从数据库获取数据的方式。尝试将数据层与表示层分开。@user1184169:如果确实要继续使用当前使用的方法,应在编写索引时检查索引。请同时发布
EXPLAIN SELECT…
的输出以供查询。感谢Mark对我的问题做了一些更改,如果有机会请查看。我不能使用IN语句,因为我还有一个导出(csv)功能,需要为每个upc水平列出结果。我不想只确定哪些存储包含任何upc,还想确定该存储中有哪些upc?@user1184169:结果是水平输出还是垂直输出不应影响从数据库获取数据的方式。尝试将数据层与表示层分开。@user1184169:如果确实要继续使用当前使用的方法,应在编写索引时检查索引。还请发布
EXPLAIN SELECT…
的输出以供查询。感谢Mark对我的问题做了一些更改,如果有机会,请查看。