Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql产品\标签查询优化_Mysql_Query Optimization - Fatal编程技术网

MySql产品\标签查询优化

MySql产品\标签查询优化,mysql,query-optimization,Mysql,Query Optimization,我有一个正在努力优化的sql查询。它基本上用于为购物车回收产品。每个产品都有使用多对多表product_标签附加的标签,我还从单独的存储表中提取了一个存储名称。我使用group_concat获取显示标签列表这就是为什么我在底部有奇怪的groupby orderby子句,我需要按日期添加订单,首先显示最新的预定产品。这是问题 SELECT `products`.*, `stores`.`name`, GROUP_CONCAT(tags.taglabel ORDER BY tags.id ASC S

我有一个正在努力优化的sql查询。它基本上用于为购物车回收产品。每个产品都有使用多对多表product_标签附加的标签,我还从单独的存储表中提取了一个存储名称。我使用group_concat获取显示标签列表这就是为什么我在底部有奇怪的groupby orderby子句,我需要按日期添加订单,首先显示最新的预定产品。这是问题

SELECT `products`.*, `stores`.`name`, GROUP_CONCAT(tags.taglabel ORDER BY tags.id ASC SEPARATOR " ") taglist
FROM (`products`)
JOIN `product_tag` ON `products`.`id`=`product_tag`.`productid`
JOIN `tags` ON `tags`.`id`=`product_tag`.`tagid`
JOIN `stores` ON `products`.`cid`=`stores`.`siteid`
WHERE `dateadded` < '2010-05-28 07:55:41'
GROUP BY `products`.`id` ASC
ORDER BY `products`.`dateadded` DESC
LIMIT 2  

有人能帮忙吗?

在我看来,你不必担心

拥有2000种产品所需的时间不会超过20种产品的100倍。这就是索引和数据库的作用,真的。。。。 对于MySQL来说,2000条记录仍然是一个非常小的表。 我认为您可以让查询保持原样,您很快就会发现它运行良好


只有当结果集变得比系统内存大时(例如,几GB),排序可能需要一段时间,因为数据库将使用磁盘,这时您才可能开始担心。在这种情况下,有时可以为未排序的结果创建一个临时表,向其中添加一个索引,然后让它们按顺序从中进行选择

猜测不能很好地扩展。如果您想知道系统将如何处理2000个产品和50个标签,请生成那么多样本数据。例如,生成10K个示例事务,并使用MySQL的EXPLAIN“query”对示例运行查询。重复100K和1M事务。
id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra
1|SIMPLE|tags|ALL|PRIMARY|NULL|NULL|NULL|4|Using temporary; Using filesort
1|SIMPLE|product_tag|ref|tagid,productid|tagid|4|cs_final.tags.id|2|
1|SIMPLE|products|eq_ref|PRIMARY,cid|PRIMARY|4|cs_final.product_tag.productid|1|Using where
1|SIMPLE|stores|ALL|siteid|NULL|NULL|NULL|7|Using where; Using join buffer