Mysql Join查询花费很长时间或挂服务器

时间:2019-06-18 04:13:53

标签: mysql

我有一个基于联接并从4个表中获取数据的查询,但是此查询所面临的问题是,当数据变大时(例如成千上万个),该查询将无法工作或需要很长时间才能响应。 / p>

SELECT   tbl_vendormain.*, 
         tbl_deviceinfo.*, 
         tbl_deviceinfo.model# AS modelno, 
         tbl_eraserinfo.*, 
         timediff(tbl_eraserinfo.endtime, tbl_eraserinfo.starttime) AS eraserdiff, 
         tbl_vendorappresult.* 
FROM     (tbl_deviceinfo) 
JOIN     tbl_eraserinfo 
ON       tbl_eraserinfo.transactionid = tbl_deviceinfo.transactionid 
AND      tbl_eraserinfo.licenseid = tbl_deviceinfo.licenseid 
AND      tbl_eraserinfo.serial = tbl_deviceinfo.serial 
JOIN     tbl_vendorappresult 
ON       tbl_vendorappresult.transactionid = tbl_deviceinfo.transactionid 
AND      tbl_vendorappresult.licenseid = tbl_deviceinfo.licenseid 
AND      tbl_vendorappresult.serial = tbl_deviceinfo.serial 
JOIN     tbl_vendormain 
ON       tbl_vendormain.transactionid = tbl_deviceinfo.transactionid 
AND      tbl_vendormain.licenseid = tbl_deviceinfo.licenseid 
WHERE    date(tbl_deviceinfo.deviceupdateddate) BETWEEN  '2019-05-01'  AND '2019-05-31'
ORDER BY date(tbl_deviceinfo.deviceupdateddate) DESC

我尝试建立索引和分区,但是响应时间并没有得到改善。我正在使用MySQL 5.7.23,有关此问题的任何帮助将非常有用。

2 个答案:

答案 0 :(得分:0)

给出的信息较少。我还是会建议。 这完全取决于以下事情

  

1)计算电源(您的服务器配置/ RAM或在Azure上然后在DTU上托管)。

     

2)编写查询。如果获取的数据更多,则需要花费时间。

尝试优化您的查询。正如@Harshwardhan建议使用视图或创建索引。

答案 1 :(得分:-1)

如果要在表中显示响应,请使用数据表。视图将花费相同的时间。

对于数据表,您可以使用datatables.net https://datatables.net/manual/installation

如果未在表中显示响应,则执行分页,分页将从表中获取有限的行数,这将花费更少的时间,然后同时获取所有行。