我的查询有问题,因为加入了很多表格。所以我想在这个查询旁边找到另一种方法但结果却一样。我的代码如下:
SELECT
tblReturn.CountryID,
tblReturn.ShopLocationId,
tblReturn.ReturnID,
tblVoucherDetail.VoucherDetailID,
tblVoucherDetail.VoucherNo,
tblVoucherDetail.BarcodeVoucher,
tblReturn.DateTimeStamp AS DateTimeReturn,
tblClient.ClientNoString,
tblSaleDetail.BarCode,
tblReturnType.Description,
tblReturn.Reason,
tblSale.DateTimeStamp AS DateTimeSale,tblReturn.Status
FROM
(
tblSale
INNER JOIN
(
(
(
tblReturn
INNER JOIN
(
tblVoucherDetail
INNER JOIN
tblVoucher ON tblVoucherDetail.VoucherID = tblVoucher.VoucherID
) ON tblReturn.ReturnID = tblVoucher.ReturnID
)
INNER JOIN
tblClient
ON
tblVoucherDetail.ClientNo = tblClient.ClientNo
)
INNER JOIN
tblSaleDetail
ON
tblReturn.SaleDetailIDOrigin = tblSaleDetail.SaleDetailID)
ON
(tblSale.SaleID = tblSaleDetail.SaleID)
AND
(tblSale.ShopLocationID = tblSaleDetail.ShopLocationID))
INNER JOIN
tblReturnType
ON
tblReturn.ReturnTypeID = tblReturnType.ReturnTypeID
WHERE
tblReturn.CountryID = 7
AND
tblReturn.ShopLocationID = 4
ORDER BY
tblVoucherDetail.VoucherDetailID DESC
我该如何调整?
答案 0 :(得分:1)
使用说明和索引。 http://dev.mysql.com/doc/refman/5.0/en/explain.html。使用索引将使数据库能够优化搜索
答案 1 :(得分:0)
虽然优化您的查询是好的(索引是您的朋友),但您可以考虑使用此多个连接的另一种方法。对数据库进行“非规范化”并创建一个具有所需数据的表。这涉及在原始表和您创建的新“报告”表中更新数据。这有明显的缺点 - (1)使用的空间更多,(2)您必须编写代码以保持数据同步,或者您必须定期重建“报告”表,(3)微妙如果您的数据 不同步,则可能会发生错误。
然而,有时非规范化是解决令人讨厌的连接性能问题的最简单和最好的解决方案。