我有一个group-by查询,当涉及到索引,连接,发送结果等时,它非常快。不幸的是,当我分析它时,mysql花了99.6%的时间“复制到临时表”。我不知道如何才能让mysql自己表现得更好。
group by查询实质上是查找系统中前20个标记的实体数量。我在这个查询的基础上过滤掉用户选择的标签,实质上缩小了字段的范围。当他们选择一个新标签时,查询性能会显著提高。如果他们选择2个或3个标签,查询会非常快地找到具有这2个或3个标签的实体数量,再加上紧随其后的最受欢迎的标签。
本质上,性能问题是当没有选择标签时,或者选择了1个标签时。解决这个问题的最佳方法是什么?
1)内存缓存,比如ehcache?让hibernate参与? 2) Mysql查询缓存? 3)将系统中每个标签的0和1标签选择结果存储在缓存表中,并在24小时内使用这些结果?是否每天使用作业填充结果?
还有其他想法吗?我使用Spring、Java、Hibernate、Mysql。
发布于 2010-07-09 02:06:24
我们绝对需要查询和EXPLAIN查询来回答这个问题。也可能与模式一起使用。
发布于 2010-07-09 01:53:39
所涉及的列类型是什么?如果查看MySql reference ,就会发现在处理过程中可能触发查询的磁盘存储的一些因素。您的磁盘系统是否足够慢,足以导致此类问题?
发布于 2010-07-09 02:25:15
您是否可以只创建一个视图,而不是复制文件?
https://stackoverflow.com/questions/3206358
复制相似问题