【发布时间】:2017-01-27 10:00:52
【问题描述】:
使用本地 java 程序,我可以访问 vps 上的数据库,其中涉及的表平均有大约 1,500 条记录。
不幸的是,尽管记录不多,但我在提取 10 秒左右时遇到了性能问题。
查询如下:
SELECT DISTINCT P.advanced_stock_management,
PA.id_product, PA.reference, PL.name,
round(P.wholesale_price,2),
round((P.price + P.price * 22 / 100), 2),
round(SP.reduction,2),
SA.quantity, PQ.is_true
FROM db.ps_product AS P
INNER JOIN db.ps_product_attribute AS PA
ON P.id_product=PA.id_product
INNER JOIN db.ps_product_lang AS PL
ON PA.id_product=PL.id_product
INNER JOIN db.ps_stock_available AS SA
ON SA.id_product_attribute=PA.id_product_attribute
LEFT OUTER JOIN db.ps_product_quantity_real AS PQ
ON PA.id_product=PQ.id_product
AND PA.reference=PQ.reference
LEFT OUTER JOIN db.ps_specific_price AS SP
ON PA.id_product=SP.id_product
WHERE P.active = 1;
如何改进查询结构并提高性能?
提前致谢。
【问题讨论】:
-
你需要
DISTINCT吗? -
VPS?或者你的意思是VPN?确定不是网速慢?
-
你能告诉我们有关表的定义和索引吗?在如此小的表上,如此长的查询时间可能表明索引不足或缺失。
-
几年前,当我试图将所有教科书都用于这样的任务时,我也遇到了同样的问题。事实证明,拥有 100 个小查询要好得多。因此,如果可以的话,只需将
JOIN查询分解为一系列较小的单独查询 -
请发布架构(包括索引)和说明 - 否则,我们只是在猜测。
标签: mysql sql performance innodb database-performance