我尝试在我的Cloud VPS cPanel phpMyadmin
中运行以下查询SELECT bankcode, bankname
FROM newbankdetails
WHERE
type='DB' AND
bankcode IN ( SELECT drawingbankname
FROM dd1
WHERE entrydate BETWEEN '01/04/2014' AND '30/04/2014'
AND paymentmode='DD'
AND state='TAMIL NADU' )
需要非常长的时间将近5到6个小时,并说出时间不足或持续运行数天并且没有显示任何错误也不会显示结果。
虽然它在我的本地机器xampp中完美运行
仅在处理像12GB这样的大型表时才会发生这种情况
如何加速并显示结果,因为它立即显示在localhost xampp
中答案 0 :(得分:0)
首先,您应该使用EXPLAIN QUERY(https://dev.mysql.com/doc/refman/5.0/en/using-explain.html)
这将为您提供有关什么是慢的信息。
您的问题似乎与表格的大小有关。在您的本地主机上,您可能有一张小桌子,但在生产中它非常大。还在nd.bankcode上的第一个表上放了一个索引。
您应该尝试删除子选择,然后使用JOIN。
此外,您应该将索引放在用于搜索的列上。
在drawingbankname,entrydate,paymentmode,state上添加索引。在nd.backcode上放一个索引。 列drawingbankname是varchar,您应该将其转换为固定字符。
删除子选择并使用JOIN。
在更改后使用EXPLAIN查看进度。
答案 1 :(得分:0)
我认为,将IN
替换为LEFT JOIN
会更有意义,如下所示:
SELECT
bankcode, bankname
FROM
newbankdetails nd
LEFT JOIN
dd1 ON nd.bankcode = dd1.drawingbankname
WHERE
nd.type='DB'
AND
dd1.entrydate BETWEEN '01/04/2014' AND '30/04/2014'
AND
dd1.paymentmode = 'DD'
AND
dd1.state = 'TAMIL NADU'
我无法对其进行测试,但我认为dd1.paymentmode = 'DD'
会因使用dd1.paymentmode IS NULL
而自动删除LEFT JOIN
行。