MySQL首先慢查询,快速查询子查询

时间:2010-10-21 21:09:39

标签: mysql performance pagination

PHP:我有一个简单的分页脚本,它使用两个查询。

MySQL:使用服务器版本4.1.25 - 我有两个表(产品,类别),其中item_num字段将它们绑在一起以通过类别检索产品,并且两者都具有索引的唯一ID字段和自动递增。它们都是MyISAM类型。

查询#1: SELECT COUNT(*) FROM rituals_collections, rituals_products WHERE rituals_collections.item_num = rituals_products.item_num AND rituals_collections.collection = '$currentCollection' $queryString ORDER BY rituals_products.id

这应该只使用这些过滤器获取记录计数,因此它不需要获取数据,从而导致更长的加载时间。 $ queryString 只是查找网址中的任何类别或子类别,如果它们在那里,则会将其添加到过滤流程中。 $ currentCollection 是用户通过下拉列表选择的内容。

查询#2: SELECT DISTINCT * FROM rituals_collections, rituals_products WHERE rituals_collections.item_num = rituals_products.item_num AND rituals_collections.collection = '$currentCollection' $queryString ORDER BY rituals_products.id LIMIT $offset, $rowsperpage

我认为这是瓶颈发生的地方。我需要 DISTINCT ,因为管理员无法消除他的重复项。查询的其余部分是相同的,除了 LIMIT $ offset,$ rowsperpage ,这限制了产品的分页目的。

数据库截图

我有截图可用,但由于我是新用户,我无法发布它们。我想,之后我可以提供它们。

最终注释:我在这里包含了整个脚本:http://pastie.org/1239167由于我的客户端使用的第三方脚本并且不可避免,因此两个表设置的位置就是这样。而且,这与MODx CMS有关,但应该非常简单。

如果有人能提供帮助,我将永远感激不尽。谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明,我在第二个分页查询中有一个不必要的mysql_num_rows,这大大减少了加载时间。现在,它几乎是即时的。

相关问题