phpMyadmin查询执行时间

时间:2015-04-28 11:27:28

标签: mysql

我尝试在我的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

2 个答案:

答案 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行。