我试图理解为什么我的查询在更改变量大小时失败了。
此查询在不到一秒的时间内运行:
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_address已编入索引。
任何人都可以对可能出现的问题有所了解吗?谢谢你的帮助。
答案 0 :(得分:5)
让我稍微重新格式化一下,让问题稍微明显一点:
....
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都需要多一次加入。
我想你只想要一个IN
表达式。尝试这样的事情:
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', ....)
这会以稍微不同的“形状”返回结果,因此您还需要对客户端代码进行一些更改。