我遇到了mysql查詢的問題。mysql查詢中的速度問題
SELECT p.`id_product`, pl.`name`, p.`ean13`, p.`upc`, p.`active`, p.`reference`, m.`name` AS manufacturer_name, stock.`quantity`, product_shop.advanced_stock_management, p.`customizable`
FROM `ps_product` p
INNER JOIN ps_product_shop product_shop ON (product_shop.id_product = p.id_product AND product_shop.id_shop = 1)
LEFT JOIN `ps_product_lang` `pl` ON p.`id_product` = pl.`id_product` AND pl.`id_lang` = 3 AND pl.id_shop = 1
LEFT JOIN `ps_manufacturer` `m` ON m.`id_manufacturer` = p.`id_manufacturer`
LEFT JOIN `ps_product_supplier` `sp` ON sp.`id_product` = p.`id_product`
LEFT JOIN `ps_product_attribute` `pa` ON pa.`id_product` = p.`id_product`
LEFT JOIN ps_product_attribute_shop product_attribute_shop ON (product_attribute_shop.id_product_attribute = pa.id_product_attribute AND product_attribute_shop.id_shop = 1)
LEFT JOIN ps_stock_available stock ON (stock.id_product = p.id_product AND stock.id_product_attribute = IFNULL(`pa`.id_product_attribute, 0) AND stock.id_shop = 1 AND stock.id_shop_group = 0)
WHERE (
pl.`name` LIKE '%search_word%'
OR p.`ean13` LIKE '%search_word%'
OR p.`upc` LIKE '%search_word%'
OR p.`reference` LIKE '%search_word%'
OR p.`supplier_reference` LIKE '%search_word%'
OR `product_supplier_reference` LIKE '%search_word%'
OR pa.`reference` LIKE '%search_word%'
OR pa.`supplier_reference` LIKE '%search_word%'
OR pa.`ean13` LIKE '%search_word%'
OR pa.`upc` LIKE '%search_word%'
)
GROUP BY `id_product`
ORDER BY pl.`name` ASC
這是一個典型的Prestashop查詢,由Product :: searchByName()執行。 我有兩個數據庫,一個是當前數據庫,另一個是一個月前的備份。
備份數據庫比當前行數多,因爲有些產品已被刪除。備份數據庫的ps_product表中大約有8200行,當前數據庫中大約有6700行。
當我在備份數據庫中執行此查詢時,執行時間爲1秒,但是當我在當前DB中執行它時......執行時間超過300秒!!!
當前數據庫有什麼問題?執行時間應該更小!!我正在生氣呢!
它們是否運行在相同的服務器硬件上?也許生產數據庫已經處於沉重負載之下? –
是的,它們在同一臺機器上運行,即開發中的服務器。 –
對查詢做一個EXPLAIN,看看它使用什麼索引執行 –