查询:
SELECT
`item`.*,
GROUP_CONCAT(DISTINCT category.English_name) AS category,
GROUP_CONCAT(DISTINCT item_color.Color) AS Color,
GROUP_CONCAT(
DISTINCT sub_category.English_name
) AS Sub_category,
GROUP_CONCAT(DISTINCT unit.Name) AS Unit,
GROUP_CONCAT(DISTINCT item_unit.Value) AS Unit_value,
`gst`.`HSN` AS `GST_hsn`,
`base_unit`.`Name` AS `Base_unit`
FROM
`item`
LEFT JOIN
`gst` ON `gst`.`ID` = `item`.`GST_hsn`
LEFT JOIN
`item_category` ON `item_category`.`Item` = `item`.`ID`
LEFT JOIN
`category` ON `category`.`ID` = `item_category`.`Category`
LEFT JOIN
`item_color` ON `item_color`.`Item` = `item`.`ID`
LEFT JOIN
`item_sub_category` ON `item_sub_category`.`Item` = `item`.`ID`
LEFT JOIN
`sub_category` ON `sub_category`.`ID` = `item_sub_category`.`Sub_category`
LEFT JOIN
`item_unit` ON `item_unit`.`Item` = `item`.`ID`
LEFT JOIN
`unit` ON `unit`.`ID` = `item_unit`.`Unit`
LEFT JOIN
`unit` AS `base_unit` ON `base_unit`.`ID` = `item`.`Base_unit`
WHERE
`item`.`Status` = 'Open'
GROUP BY
`item`.`ID`
如果您想访问schema。请访问sqlfiddle上的db schema。
http://sqlfiddle.com/#!9/c1b1e0/1号机组
我有1500多行,执行它几乎需要5秒,如何优化这个查询,使这个查询不到1秒。
1条答案
按热度按时间kmb7vmvb1#
在多对多表中缺少合适的索引是一个重要的性能问题。遵循中的建议
http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table
上面写着
这样做吧(当然,要根据特定的表名和列名进行调整。)
笔记:
要有条件地插入新链接,请使用iodku
请注意,如果您在这个表中有一个auto\ increment,iodku将非常迅速地“烧录”id。