我有一个基于联接并从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
,有关此问题的任何帮助将非常有用。
答案 0 :(得分:0)
给出的信息较少。我还是会建议。 这完全取决于以下事情
1)计算电源(您的服务器配置/ RAM或在Azure上然后在DTU上托管)。
2)编写查询。如果获取的数据更多,则需要花费时间。
尝试优化您的查询。正如@Harshwardhan建议使用视图或创建索引。
答案 1 :(得分:-1)
如果要在表中显示响应,请使用数据表。视图将花费相同的时间。
对于数据表,您可以使用datatables.net https://datatables.net/manual/installation
如果未在表中显示响应,则执行分页,分页将从表中获取有限的行数,这将花费更少的时间,然后同时获取所有行。